簡體   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