我有一個單一的LINQ到SQL類。我想檢測它是否是新的(意味着插入將完成)或者是否有任何未決更改(將會完成更新)。我意識到我可以通過使用partial
類並掛鉤每個屬性的更改事件來做到這一點。然而,對於一個不斷變化的班級來說,這是一個很大的維護。如何判斷linq到sql對象是新的,修改還是未更改?
有沒有更好的方法?
我有一個單一的LINQ到SQL類。我想檢測它是否是新的(意味着插入將完成)或者是否有任何未決更改(將會完成更新)。我意識到我可以通過使用partial
類並掛鉤每個屬性的更改事件來做到這一點。然而,對於一個不斷變化的班級來說,這是一個很大的維護。如何判斷linq到sql對象是新的,修改還是未更改?
有沒有更好的方法?
您可以通過DataContext
類來檢查。
首先,檢查ObjectTrackingEnabled
property的DataContext
。如果它返回false,那麼該對象不會被上下文跟蹤。
然後,撥打DataContext
上的GetChangeSet
method。從那裏,將Deletes
,Updates
和Inserts
屬性提供的參考文件與您的對象進行比較。
如果在任何這些列表中找到了引用,那麼您的對象正在被該列表追蹤,您可以從那裏繼續。
檢查對象的ID爲0
if someId = 0
Insert();
else
Update();
Simples
Research DeferredLoading和谷歌Detach()方法 - 這是你必須實現的東西,但它通過LINQ插入會爲你節省一些麻煩。 – 2010-06-02 22:38:43
所以這樣做是從DataContext的,那麼唯一的辦法嗎?我希望僅僅從對象實例中完成。 – 2010-06-02 19:28:10
@Jason Webb:如果你沒有DataContext,那麼它是無關緊要的,你不能做一個插入,更新或刪除沒有,並且對象的狀態是分離的。 – casperOne 2010-06-02 21:37:28