2012-01-05 29 views
8

我有這段代碼之前:的LINQ無法找到插入記錄的SubmitChanges

LinqDataContext ctx; 

MyRecord R = new MyRecord(); 
R.Title = "test"; 
ctx.AllRecords.InsertOnSubmit(R); 

bool bExists = ctx.AllRecords.Any(r => r.Title == "test"); 

注:我沒有叫的SubmitChanges。

爲什麼bExists回來爲假? Linq不應該能看到插入的記錄嗎?

回答

1

我相信

bool bExists = ctx.AllRecords.Any(r => r.Title == "test"); 

是一個SQL查詢的SQL服務器返回結果。所以如果你還沒有提交,那麼DB不知道任何事情:

MyRecord R = new MyRecord(); 
R.Title = "test"; 
+0

好的,但我的觀點是Lin2SQL應該選擇它嗎?它不緩存對象?有沒有一種我可以調用的方法來檢查緩存? – Jack 2012-01-05 03:45:08

+0

L2S緩存對象,但我相信未提交的數據存儲在與「真實」數據不同的位置。將它們存儲在同一位置是沒有意義的,因爲如果修改條目然後重新查詢原始條目,則不希望任何條目(原始或修改)被覆蓋。 – 2012-01-06 16:08:04

8

如果未調用submitchanges(),請參閱Linq無法將值寫入數據庫。

而對於第二個問題,是的,Linq在提交前緩存對象。我們還可以獲取緩存但未提交到數據庫的記錄。

當你插入上面記錄着,我們可以得到上面記錄着從下面的DataContext的緩存:

首先從DataContext的爲獲取變更:

System.Data.Linq.ChangeSet MySet = ctx.GetChangeSet(); 

它之後,提取您的記錄表變更集:

MyRecord b = (MyRecord)MySet.Inserts.Last(); 

您將得到標題爲MyRecord作爲「測試」,您插入。

希望這會有所幫助。