2011-11-18 225 views
0

例如,我有一個綁定到客戶實體的wpf窗口(假設它是cus1)。然後,我從加載上下文中的另一個實體:在實體框架中複製實體?

customer cus2 = context.customers.where(x=>x.id=10).FirstOrDefault(); 

現在我想cus1 = cus2?我能做到這樣:

cus1.name = cus2.name; 
cus1.address = cus2.address; 
... 
... 

這種方式符合我的情況下(在形式變化textboxs的內容立刻變成cus2的值),但我不知道是否有反正把它縮短,因爲cus1 = cus2沒有按」工作?

感謝

回答

1

你也可以使用序列化或反射,做你自己。然而,這兩種方法都比較慢,然後直接寫入。

看看這篇文章。也許你會發現它的幫助:

http://www.codeproject.com/KB/dotnet/CloningLINQ2Entities.aspx

編輯: 順便說一句。請記住,在使用MemberwiseClone時,如果使用ReferenceTypes,將會影響引用而不是對象。

1

如果你想在你可以使用刷新方法對你的ObjectContext數據存儲中的最新值更新內存中的客戶實體的值。

這裏是documentation

在你的情況下,它看起來像:

context.Refresh(RefreshMode.StoreWins, cus1); 

如果你真的想映射兩個實體,你可以看看AutoMapper。 AutoMapper將通過自動將實體映射到彼此,並使用默認設置來幫助您,您可以根據自己的需求進行調整。

2

可以使用按成員的克隆方法,使業務對象的shallowcopy: 見http://msdn.microsoft.com/de-de/library/system.object.memberwiseclone.aspx

+0

這沒有幫助。表單中文本框的文本不會立即改變。 – JatSing

+0

你的綁定是什麼樣的?你是否實現了INotifyPropertyChanged接口? – SvenG

+0

是的,INotifyPropertyChanged已由實體框架4在自動生成的代碼中實現。我的控件直接綁定到實體中。正如我所說,到目前爲止只有這個技巧纔有效:cus1.name = cus2.name; cus1.address = cus2.address; ... 但我正在尋找更好的方法,不需要分配每個屬性。 – JatSing