2010-03-22 22 views
3

運行.NET 2008,asp.net,LINQ to SQL中,SQL Server 2008 Express的使用LINQ to SQL中,沒有及時更新,但不會引發異常

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

我有一個非常基本的表,其中有幾個領域,並沒有FK限制。當我調用.SubmitChanges()時,不會保存任何數據,但不會引發錯誤。有任何想法嗎?

不使用任何明確的事務範圍,字段不會自動生成,並且服務器上沒有觸發器。

+2

錯字 - 應該是f.IsValid? – tvanfosson 2010-03-22 15:59:55

回答

3

Tyop放在一邊,首先要嘗試的是設置db.Log = Console.Out;以查看是否有任何TSQL出現問題(或更好:運行SQL跟蹤)。如果什麼都沒有發送然後可能IsValid已經正確 - 它不會重新保存這些更改,除非它必須(unless you force it)。

不太可能,您可能會意外關閉對象跟蹤(db.ObjectTrackingEnabled)。

其他常見的錯誤包括:

  • 沒有要求Complete()使用時TransactionScope(如果使用TransactionScope
  • 與數據庫文件(而不是一個單獨的服務器),在原來的檢查文件(在解決方案中)而不是在構建輸出中(通常爲/ bin/debug或/ bin/release)。

我也假設IsValid實際上是一個DB-對應的屬性(他們沒有成爲)

+1

db.Log = Console.Out;是一個非常棒的提示,謝謝。 – 2010-03-22 16:36:11

+0

將此標記爲解決方案,因爲它將我引向解決方案。 – 2010-03-22 16:38:12

+0

@Marc這個問題也可能是由沒有定義PK的表引起的。在這種情況下,LINQ to SQL將默默忽略更改。 – 2013-04-02 14:18:31

2

您需要將IsValid設置爲f而不是x

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

請記住,如果你使用的是一個叫CompleteTransactionScope

+0

這是一個錯字。 x.IsValid不會編譯,更不會引發異常;)感謝您的支持 – 2010-03-22 16:30:35

2

IsValid在設計器中被標記爲AutoGenerated字段嗎?如果是這樣,您所做的任何更改都將傳播回服務器。此外,是否有可能在更新時運行的數據庫觸發器,而不是在插入時說,即將其設置爲默認值0(false)?

+0

服務器上沒有觸發器。 – 2010-03-22 16:31:48

1

原來,主鍵已經從DB自從上次被丟棄當時我正在使用這個應用程序。當我重新生成.dbml最近它沒有主鍵生成。重新加入已經解決了這個問題。