繁体   English   中英

使用Linq to Sql,不会更新,但不会抛出异常

[英]Using Linq to Sql, does not update, but does not throw exception

运行.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()时,没有数据保存,但没有抛出任何错误。 有任何想法吗?

不使用任何显式事务范围,字段不会自动生成,并且服务器上没有触发器。

抛开Tyop,首先要尝试设置db.Log = Console.Out; 查看是否有任何TSQL问题(或更好:运行SQL跟踪)。 如果没有发送任何东西,那么IsValid可能已经是真的 - 它不会重新保存这些更改,除非必须( 除非你强制它 )。

不太可能,您可能不小心关闭了对象跟踪( db.ObjectTrackingEnabled )。

其他常见错误包括:

  • 不调用Complete()使用时TransactionScope (如果你使用 TransactionScope
  • 使用数据库文件 (而不是单独的服务器),检入原始文件(在解决方案中)而不是在构建输出中(通常是/ bin / debug或/ bin / release)。

我还假设 IsValid实际上是一个db-mapping属性(它们不一定是)

您需要在f上设置IsValid而不在x

Foo f = db.Foo.First(x => x.ID == id); 
f.IsValid = true; 
db.SubmitChanges(); 

如果您使用的话,请记得在TransactionScope上调用Complete

IsValid是否在设计器中标记为AutoGenerated字段? 如果是这样,您所做的任何更改都不会传播回服务器。 此外,您是否有可能在更新时运行的数据库触发器,而不是插入,即将其设置为默认值0(false)?

事实证明,自从我上次使用此应用程序以来,主键已从数据库中删除。 当我最近重新生成.dbml时,它生成时没有主键。 将其添加回来已经解决了问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM