LINQ在.SubmitChanges()时没有更新

25

有没有什么原因阻止这样做的工作?

这是我多次使用LINQ更新表中记录的逻辑:

 DataClasses1DataContext db = new DataClasses1DataContext();
 User updateUser = db.Users.Single(e => e.user == user);
 updateUser.InUse = !updateUser.InUse;
 db.Log = new System.IO.StreamWriter(@"c:\temp\linq.log") { AutoFlush = true };
 db.SubmitChanges();

(updateUser.InUse是一个位字段)

由于某种原因,它没有起作用。当我检查linq.log时,它完全为空。

我的.dbml可能存在问题吗?其他表似乎都正常工作,但我已经比较了.dbml中的属性,它们都匹配。

好像db.SubmitChanges()没有检测到需要更新的任何内容。


1
submitchanges 上享受您的分类学家 :P - aarona
2个回答

77

由于没有主键,表无法正确更新。 (实际上,该列存在,但在将其选择到我的开发表中时未复制约束)。DataContext类需要一个主键才能进行更新。


2
还有我的问题。这些年过去了,我仍然犯同样的错误。很容易忽略,特别是只有一个表格有问题时。为什么Skeet的排名仍然那么高?声望太高了吗? - Andrew
呃!我一直在为这个问题奋斗整整一天,直到我发现了这条评论。我的表没有主键......现在重新开始规划... - Mike Wills

2

在LINQ中,InUse属性是否是“普通”的属性?(例如,它不是自动生成的或类似的东西吗?)

另外,我不确定它是否是一个Nullable<bool>,当前值为null?如果是这样的话,你的更新行实际上并没有做任何事情——对于可空布尔值,!null = null。


updateUser.InUse = !updateUser.InUse;这不是问题。它不可为空,我已经尝试过硬编码false和true。它不是自动生成的。 - ctrlShiftBryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接