首先,我已经阅读了类似的帖子,并没有看到他们如何解决这个问题。如果我遗漏了一些东西,请指出是什么。
我的Linq代码与Scott Gu的expensiveUnpopularProducts example非常相似。但是,就我而言,数据库没有使用新值进行更新。没有引发异常,并且所有变量似乎在调试器中都有合理的值(填充结果集,连接字符串正确,...)。
using (MyDataContext db =
new MyDataContext(CONNECTION_STRING))
{
var resultSet = from l in db.Logs
where l.ProcessCode == null
select l;
foreach (var bm in resultSet)
{
bm.ProcessCode = 1;
// Debugger shows bm.ProcessCode properly set
}
db.SubmitChanges();
}
为什么SubmitChanges()不会导致数据库更新?
注意:这是我的真实方法的简化案例。真实的还将记录插入另一个表中。该插入工作正常,因此我确信连接字符串正确且正常运行。
答案 0 :(得分:1)
编辑:查看this question的答案。它也可能是你的答案。答案结果是,除非桌面上有主键,否则LINQ to SQL不会进行更新。我打赌你还需要在课堂上设置ColumnAttribute
的主键部分。由于您已使用代码生成器,因此在更新数据库中的表之后可能需要重新生成该部分。当然,假设这是问题。
具有ProcessCode
属性的类是否实现INotifyPropertyChanged
? ProcessCode
属性是否会触发PropertyChanged
事件?
您还需要确保DataContext
将ObjectTrackingEnabled
属性设置为true。它应该是默认的,但很容易检查。
您还可以使用GetChangeSet
上的DataContext
方法查看更新内容。它可以帮助调试。
答案 1 :(得分:0)
我的第一个猜测是你的Linq查询对任何匹配元素的resultSet执行深度复制。因此,当您执行db.SubmitChanges()时,您将在另一个数据副本上运行。如果在db.SubmitChanges()之前放置一个断点,你能看到db中的数据是否正确更新了吗?