0

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

  • 实体未更改,因此不会发生更新
  • 实体缺少主键但未发生更新

在我的情况下,这些都不是。

我的课和桌子上有我的 PK。数据上下文的 GetChangeSet() 指示至少有 1 次更新。

我看到的唯一问题是数据上下文日志中没有生成更新语句。

有谁知道问题可能是什么。

这是代码示例:

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();
 }
}
4

2 回答 2

0

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

我以前向我的 DataContext 类添加了验证逻辑。例如,如果我的表名是“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 博客帮助了我很多... http://weblogs.asp.net/scottgu/linq-to-sql-part-4-updating-our-database

于 2014-08-01T14:43:11.810 回答
0

你可以试试这个

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

   System.Data.Linq.ChangeSet set = db.GetChangeSet();
 }
于 2014-08-01T11:39:07.283 回答