首页 新闻 搜索 专区 学院

LINQ to SQL 将新的记录更新到数据库出错

0
悬赏园豆:10 [已解决问题] 解决于 2012-05-01 15:16

我采用的是三层架构:详细情况如下
表示层:  
  C# code
   private void AddRecordButton_Click(object sender, EventArgs e)
   {
      this.happen();
       DataLinq.员工信息表 obj = new DataLinq.员工信息表();
                    obj.员工编号 = eid;
                    obj.姓名 = ename;
                    obj.性别 = esex;
                    obj.出生年月 = ebirthday;
                    obj.身份证号码 = ecard;
                    obj.电话 = etel;
                    obj.联系地址 = eaddress;
                    obj.部门编号 = sid;
                    obj.职位编号 = pid;
                    obj.薪水 = (decimal)ewage;
                    obj.入职时间 = entertime;
                    obj.员工状态 = state;
                    obj.简历 = resume;
                    obj.备注 = remarks;
                    obj.照片 = imageBytes;
                    //更新数据库中表记录
                    flat = objEmployee.UpdateRecord(obj); //这里最终调用数据访问层的 UpdateRecord(员工信息表                                                                                                            localTable)方法
                     //修改成功与否判定
                    if (flat)
                    {
                        MessageBox.Show("添加成功!");
                    }
                    else
                    {
                        MessageBox.Show("添加失败!");
                    }

   }
    
业务逻辑层:

public class

{

   DataLinqDataContext myDataContext = new DataLinqContext();

   public bool UpdateRecord(员工信息表 localTable)

  {

    return myDataContext.UpdateRecord(localTable);

  }

}


  数据访问层:
  C# code
  public  class
  {  
       private DataLinqDataContext myDataContext = new DataLinqDataContext();
      //添加UpdateRecord方法,更新记录
        public bool UpdateRecord(员工信息表 localTable)
        {
            try
            {
                //附加外部实体到DataContext中
                myDataContext.员工信息表.Attach(localTable);
                //更新上下文数据
                myDataContext.Refresh(RefreshMode.KeepCurrentValues, localTable);
                //提交更新
                myDataContext.SubmitChanges(ConflictMode.ContinueOnConflict);
               
                return true;
            }
            catch 
            {
                return false;
            }
        }
}
   


可是在myDataContext.Refresh(RefreshMode.KeepCurrentValues, localTable);调试中出现 "无法刷新指定的对象。对象不再存在于数据库中“

  求大虾来看看!!!!!!!!!

戈非的主页 戈非 | 初学一级 | 园豆:184
提问于:2012-04-30 12:38
< >
分享
最佳答案
1

你的问题是对Refresh的使用不当。

1——

Refresh是将已经在DataContext这个环境中已经存在(下载,也就是Select)的数据进行刷新(从数据库再次获取。

2——

你用了new一个对象,此时,这个对象还只是InsertOnSubmit,并没有真正的Submit到数据库,此时你用Refresh,因为new的对象没有在数据库存在,所以报告了错误。

3——

Refresh的操作会导致你已经修改的数据被复位,主要是你下载后又修改的对象,如果你对数据对象有修改而又没有Submit,那么,你的修改将会被清除。

4——

非必要,不建议调用Refresh。

 

问题解决:不要调用Refresh。

收获园豆:10
无之无 | 大侠五级 |园豆:5085 | 2012-04-30 16:48

如果没有Refresh的话,那么在客户端进行编辑和添加记录后就不再在显示位置显示已经添加了的记录啊

戈非 | 园豆:184 (初学一级) | 2012-04-30 17:04

@戈非:  那你可以在Submichange后调用Refresh试看。我很少用这个方法。

无之无 | 园豆:5085 (大侠五级) | 2012-04-30 17:07

@笨笨蜗牛: 在Submitchangs之后调用refresh

1——————编辑员工信息,点击确定可以添加成功,但是无法在客户端显示

2——————添加员工信息,提示添加失败,原因是Insert更新记录失败,返回false

戈非 | 园豆:184 (初学一级) | 2012-04-30 19:45

@戈非: 获取你的try-catch中的异常信息,分析一下。肯定是你的某些数据策略或者SQL-LinQ出现了故障。

myDataContext.员工信息表.Attach(localTable);

这个语句我没用过。如果是新建对象,此时应该是使用InsertOnSubmit进行添加。如果是更新状态,我想这个Attach应该是针对不同的DataContext对象的操作行为,假如不是在同一个DataContext,那么应该可以不使用。

无之无 | 园豆:5085 (大侠五级) | 2012-04-30 20:58

@笨笨蜗牛: 就是应该用InsertOnSubmit,我就错在使用了UpdateRecord了

戈非 | 园豆:184 (初学一级) | 2012-05-01 15:17
其他回答(1)
1

LINQ TO SQL 更新数据不是调用change事件么

┢┦偉 | 园豆:1240 (小虾三级) | 2012-04-30 13:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册