如何在實體框架4中進行深度複製(克隆)? 我需要獲得所有相關對象副本的EntityObject副本。如何在實體框架4中進行深度複製(克隆)?
0
A
回答
1
這是我做通用深副本:
public static T DeepClone<T>(this T obj)
{
using (var ms = new MemoryStream()) {
var bf = new BinaryFormatter();
bf.Serialize(ms, obj);
ms.Position = 0;
return (T)bf.Deserialize(ms);
}
}
0
0
我懷疑你不一定需要一個深層克隆 - 一個新的對象與被複制的屬性通常就足夠了 - 這樣,如果一個屬性被重新分配,它不會混淆你克隆的原始EntityObject。
順便說一下,我看到延遲加載沒有問題 - 這是你想要的。
來源:http://www.codeproject.com/Tips/474296/Clone-an-Entity-in-Entity-Framework-4
public static T CopyEntity<T>(MyContext ctx, T entity, bool copyKeys = false) where T : EntityObject
{
T clone = ctx.CreateObject<T>();
PropertyInfo[] pis = entity.GetType().GetProperties();
foreach (PropertyInfo pi in pis)
{
EdmScalarPropertyAttribute[] attrs = (EdmScalarPropertyAttribute[])pi.GetCustomAttributes(typeof(EdmScalarPropertyAttribute), false);
foreach (EdmScalarPropertyAttribute attr in attrs)
{
if (!copyKeys && attr.EntityKeyProperty)
continue;
pi.SetValue(clone, pi.GetValue(entity, null), null);
}
}
return clone;
}
可以與entites的複製到克隆的對象現在也;假設你有一個實體:客戶,其中有導航屬性:訂單。然後,您可以通過使用上述方法複製的客戶和他們的訂單:
Customer newCustomer = CopyEntity(myObjectContext, myCustomer, false);
foreach(Order order in myCustomer.Orders)
{
Order newOrder = CopyEntity(myObjectContext, order, true);
newCustomer.Orders.Add(newOrder);
}
相關問題
- 1. 如何在java中進行淺層克隆和深度克隆?
- 2. 如何在javascript中進行深度克隆
- 3. 精簡框架中的深入克隆
- 4. 在C#中深度克隆深物體(很深)
- 5. 在rails中克隆記錄,是否可以克隆關聯和深度複製?
- 6. 在實體框架中複製實體?
- 7. 使用實體框架克隆對象4
- 8. Yui3中的深度克隆
- 9. Actionscript中的深度克隆
- 10. 在VBA中深度複製或克隆ADODB記錄集
- 11. 實體框架4 - 難以理解克隆實體的工作原理
- 12. 實體的實體框架4問題保存克隆與查找參考
- 13. 實體框架6十進制精度
- 14. 克隆(深層複製)實體框架代碼數據庫中的第一個對象
- 15. 實體框架包括深度
- 16. 如何深入克隆ColdFusion ORM中的持久實體?
- 17. 對象的深度克隆
- 18. 如何在實體框架中處理重複鍵異常4
- 19. 實體框架4
- 20. 實體框架4
- 21. 克隆複合體Hibernate實體
- 22. 使用NHibernate的深度複製實體
- 23. 實體框架進行MySQL實體
- 24. 使用反射對集合(鍵/值對)進行深度克隆
- 25. 使用JSON.stringify進行深度比較和克隆可以嗎?
- 26. 克隆Phonecall實體
- 27. ADO.NET實體框架夸克
- 28. 深度克隆模型時,如何複製關聯的s3資產?
- 29. 如何在類中實現克隆和複製方法?
- 30. 如何在C#驅動程序中用BsonSerializer克隆/複製MongoDB的POCO實體
看來你可以用一個StackOverflowException結束了,如果你的實體有一個循環引用。 – 2011-04-03 13:58:57
爲我工作得很好。 – Joshy 2012-04-27 05:58:46