2010-01-16 33 views
3

當我的數據庫中的新實體被創建,然後我從datacontext請求一個表時,新的實體不會出現。 是linq緩存表並返回緩存版本?如果是的話,我該如何阻止linq這樣做。從緩存表中停止linq

DALConnector.Dc.Order.InsertOnSubmit(NewOrder); 
DALConnector.Dc.SubmitChanges(); 

現在我點擊一個按鈕,顯示上有一個gridview的數據綁定到DALConnector.Dc.Order不顯示新訂單

回答

2

你如何重新綁定網格形式?它不緩存結果,所以我不確定爲什麼這是一個問題。您必須重新查詢上下文以獲取新記錄......或者,如果您正在重新綁定對象的記錄(例如您是綁定客戶),則可以使用ensurihg將訂單添加到客戶對象的訂單集合中,而不需要重新查詢。

因此,如果你以這種方式結合:

grid.DataSource = customer.Orders; 

只能獲得新的訂單回來,如果你做的事:

customer.Orders.Add(newOrder); 
dc.Orders.InsertOnSubmit(newOrder); 
dc.SubmitChanges(); 

然後,你可以直接綁定customer.Orders。

0

Linq2Sql DataContext不緩存整個表,它只有一個檢索實體的緩存用於更改跟蹤目的。如果您在插入訂單後使用新的DataContext進行查詢,則結果可能會相同。

因爲您正在使用Linq2Sql,它只能與SQL Server一起使用,所以我建議啓動SQL Server Profiler並檢查是否真正的insert語句首先提交給數據庫。

檢查你的dbml,你使用運行時插入還是存儲過程Order

另外檢查你是否沒有吞嚥DataContext可能引發的任何異常SubmitChanges()

如果這沒有幫助,請添加您的查詢代碼,以便我們也可以驗證它。