2010-06-01 65 views
2

我想通過linq更新實體,但由於在序列化後在視圖中編輯了實體,因此我沒有直接訪問數據中的實體上下文。我可以這樣做:通過LINQ to SQL中的新對象更新實體

entity.property1 = obj.property1; 
entity.property2 = obj.property2; 
... 

多數民衆贊成在酷不...涼爽的一切。

我想接下來的事情是通過.attach做()像這樣:

context.Table.attach(entity, obj); 

也不起作用。那麼是否有另一種選擇沒有反思?

+0

什麼用 「附加」 的情況下發生了什麼? – 2010-06-01 20:18:35

+0

那麼在這種情況下,我會分離實體,我認爲這實際上不是它應該使用的方式。由於沒有分離方法(http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/11/21/linq-to-sql-table-lt-t-gt-detach-method-does -not-exist.aspx),我實際上不知道如何附加一些東西。有一種方法(http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx),但坦率地說,我不喜歡修改模型。我想實現我想要的最簡單的方法就是使用反射。 – 2010-06-02 16:51:16

回答

0

Attach()不工作,因爲實體仍然附加到DataContext。您是否考慮過在重新連接實體時創建DataContext的新實例?通常建議不要使用長壽命的DataContext,而應該爲每個工作單元創建一個新實例。這是因爲只要你在內存中保存一個DataContext實例,你從它中檢索到的所有實體都會保留在內存中(假設啓用了ObjectTracking)。

從MSDN:

一般來說,一個DataContext實例 設計壽命爲一個「 工作單位」但是你的應用程序定義 這個詞。一個DataContext是 輕量級,並且對於 創建並不昂貴。典型的LINQ to SQL 應用程序在方法範圍創建DataContext 實例或作爲 代表相關 數據庫操作的邏輯集的短命類成員。

http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx

+0

畢竟我使用遞歸,但你的答案是健全的:-)謝謝 – 2010-06-05 14:40:10