2010-05-20 20 views
1

在LINQ to SQL中,如果其他人沒有改變,我想避免設置一些列?說我有使用Linq To SQL時,如何避免設置某些列(如果其他列未更改)?

dim row = (From c in dataContext.Customers Where c.Id = 1234 Select c).Single() 
row.Name = "Example" 
' line 3 
dataContext.SubmitChanges() ' line 4 

大,這樣的LINQ to SQL取出一行,在內存中設置名稱爲「示例」,併產生一個更新SQL查詢只在必要時凹口 - 是,沒有SQL會如果客戶的姓名已經是「示例」,則生成該消息。

因此,假設在第3行,我想檢測行是否已經改變,如果是,設置row.UpdateDate = DateTime.Now。如果行沒有更改,我不想設置row.UpdateDate,以便不生成SQL。有沒有什麼好方法可以做到這一點?

+0

這是OR抽象的醜陋的一面。有沒有辦法避免必須關心這一點;也就是說,無論何時設置OR映射以在其他列發生更改時自動更新row.UpdateDate? – 2010-06-08 22:07:32

回答

1

你可以實現這樣的事情,因爲我不確定是否有默認的方法來完成這個,因爲你正在設置屬性。

Dim row = (From c in dataContext.Customers Where c.id = 1234 Select c).Single 
if (row.Name <> "Example") Then 
    row.Name = "Example" 
    row.UpdateDate = DateTime.Now 
End If 
datacontext.SubmitChanges() 

編輯

有一個PropertyChanged事件DataContext類,你可以掛接到內部。

所以你可以做這樣的事情

的AddHandler row.PropertyChanged,AddressOf UpdateRowDate

+0

這就是我所害怕的。你可以想象,如果有十列設置,那麼我必須在我的條件下管理十個謂詞。我只想說 [如果row.HasChanged()然後row.UpdateDate = DateTime.Now] 我可以寫我自己的方法,如果我知道如何檢測行是否已經改變了內存。 – 2010-05-20 18:27:46

+0

查看生成的datacontext類後進行編輯 – msarchet 2010-05-20 18:36:09

+0

您可以使用PropertyChanged,但它也很麻煩。 – 2010-07-30 14:14:19

0

我想不出實際的代碼了我的頭頂部,但由於LINQ到SQL實體部分類只是擴展了一些邏輯來檢查它。每個屬性都有更改時發生的事件,因此在您的部分類中綁定到屬性已更改的事件並讓它在對象上設置UpdateDate。

相關問題