Linq to sql Linq2Sql不更新更改

Linq to sql Linq2Sql不更新更改,linq-to-sql,datacontext,submitchanges,Linq To Sql,Datacontext,Submitchanges,我正在使用Linq2Sql更新行数据,但一旦我更改了值 我以前研究过这个问题,发现了以下可能的原因: 实体未更改,因此未发生更新 实体缺少主键,但未进行更新 在我的情况下,这些都不是问题 我的PK在我的班级和桌子上。 数据上下文的GetChangeSet()指示至少有1个更新 我看到的唯一问题是,从数据上下文日志来看,没有生成update语句 有人知道问题可能是什么吗 以下是代码示例: using(context db=new context()) { db.Log=new System.

我正在使用Linq2Sql更新行数据,但一旦我更改了值 我以前研究过这个问题,发现了以下可能的原因:

  • 实体未更改,因此未发生更新
  • 实体缺少主键,但未进行更新
在我的情况下,这些都不是问题

我的PK在我的班级和桌子上。 数据上下文的GetChangeSet()指示至少有1个更新

我看到的唯一问题是,从数据上下文日志来看,没有生成update语句

有人知道问题可能是什么吗

以下是代码示例:

using(context db=new context())
{
 db.Log=new System.IO.StreamWriter(sample){AutFlush=true};
 MyObject obj=db.MyTable.SingleOrDefault(row=>Email==email);
 if(obj!=null)
 {
   obj.FirstName=firstName;
   obj.LastName=lastName;
   System.Data.Linq.ChangeSet set=db.GetChangeSet();
   db.SubmitChanges();
 }
}
你可以试试这个

if(obj!=null)
 {
   obj.FirstName=firstName;
   obj.LastName=lastName;
   db.MyTable.InsertOnSubmit(obj);
   db.SubmitChanges();

   System.Data.Linq.ChangeSet set = db.GetChangeSet();
 }

我发现了问题。对任何感兴趣的人

我预先向DataContext Clas添加了验证逻辑。 例如,如果我的表名是“Product”,我将验证添加到分部方法“UpdateProduct”

但是,我忽略了告诉LINQ to SQL继续对数据库进行更改。所以它会验证,然后什么也不做,因为我没有继续代码

对于任何需要它的人,为了正确地这样做,我需要在逻辑通过时调用“ExecuteDynamicUpdate”

更新的解决方案示例:

partial void UpdateObj(Obj instance)
{
  if(instance.Field==null)
  {
     thow new NotImplementedException();
  }
  //Added missing code continuation
  this.ExecuteDynamicUpdate(instance);
}

ScottGu博客帮了我很多…

行已经存在,所以当我尝试InsertOnSubmit时,我得到“无法添加已经存在的实体”