运行.net 2008,asp.net,Linq to sql,sql server 2008 express
Foo f = db.Foo.First(x => x.ID == id);
f.IsValid = true;
db.SubmitChanges();
我有一个非常基本的表,它有几个字段,没有FK约束。当我调用.SubmitChanges()时,没有数据保存,但没有抛出任何错误。有什么想法吗?
不使用任何显式事务范围,不自动生成字段,服务器上也没有触发器。
答案 0 :(得分:4)
db.Log = Console.Out;
以查看是否存在任何TSQL(或更好:运行SQL跟踪)。如果没有任何内容发送,那么IsValid
已经为真 - 除非必须(unless you force it),否则不会重新保存此类更改
不太可能,您可能会意外关闭对象跟踪(db.ObjectTrackingEnabled
)。
其他常见错误包括:
Complete()
时未调用TransactionScope
(如果 使用TransactionScope
)我也假设 IsValid
实际上是db-mapping属性(它们不一定是)
答案 1 :(得分:2)
您需要在IsValid
上设置f
,而不是x
。
Foo f = db.Foo.First(x => x.ID == id);
f.IsValid = true;
db.SubmitChanges();
如果您使用Complete
,请务必致电TransactionScope
。
答案 2 :(得分:2)
IsValid是否在设计器中标记为AutoGenerated字段?如果是这样,您所做的任何更改都不会传播回服务器。此外,您是否有可能在更新时运行的数据库触发器,而不是插入,即将其设置为默认值0(false)?
答案 3 :(得分:1)
事实证明,自从我上次使用此应用程序以来,主键已从数据库中删除。当我最近重新生成.dbml时,它生成时没有主键。重新添加它已解决了这个问题。