复制实体框架对象 [英] Copy Entity Framework Object

查看:148
本文介绍了复制实体框架对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个EF4.1 X类,我想打的副本及其所有子记录。
XY和XYZ



现在,如果我做了以下则返回错误。



属性 X.ID'是对象的关键信息的一部分,不能修改。

 公共无效CopyX(长ID)
{
变种C = db.Xs.Include(Y)包含(W)包含(YZ)的SingleOrDefault(X => x.ID == ID)。。。;
如果(C!= NULL)
{
c.ID = 0;
c.Title =复制+ c.Title;
为(VAR M = 0; M< c.Ys.Count; M +)
{
c.Ys [M] .ID = 0;
c.Ys [M]。.XID = 0米;
为(VAR P = 0; P< c.Ys [M]。.Zs.Count,P ++)
{
c.Ys [M]。.Zs ​​[P] .XID = 0 - 米;
c.Ys [M]。.Zs ​​[P] .ID = 0 - P;
}
}
为(VAR I = 0; I< c.Ws.Count;我++)
{
c.Ws [I] .ID = 0 - 我;
c.Ws [I] .XID = 0;
}
db.Entry<内容>(三).STATE = System.Data.EntityState.Added;
db.SaveChanges();
}
}

或有做实体对象的副本的其他途径。



请注意:有每个W2多重特性,X,Y,Z


解决方案<。 / DIV>

您需要使整个实体图的正确深拷贝 - 最好的办法是序列原始实体图形内存流,并将其反序列化到一个新的实例。你的实体必须是可序列化。它经常与DataContractSerializer的使用但您可以使用二进制序列化以及。


I have a EF4.1 class X and I want to make copy of that plus all its child records. X.Y and X.Y.Z

Now if I do the following it returns error.

The property 'X.ID' is part of the object's key information and cannot be modified.

public void CopyX(long ID)
{
    var c = db.Xs.Include("Y").Include("W").Include("Y.Z").SingleOrDefault(x => x.ID == ID);
    if (c != null)
    {
        c.ID = 0;
        c.Title = "Copy Of " + c.Title;
        for (var m = 0; m < c.Ys.Count; m++)
        {
            c.Ys[m].ID = 0;
            c.Ys[m].XID=0-m;
            for (var p = 0; p < c.Ys[m].Zs.Count; p++)
            {
                c.Ys[m].Zs[p].XID = 0 - m;
                c.Ys[m].Zs[p].ID = 0 - p;
            }
        }
        for (var i = 0; i < c.Ws.Count; i++)
        {
            c.Ws[i].ID = 0 - i;
            c.Ws[i].XID = 0;
        }
        db.Entry<Content>(c).State = System.Data.EntityState.Added;
        db.SaveChanges();
    }
}

Or Is there other way of making copy of entity objects.

NOTE: there are multiple properties in each W,X,Y,Z.

解决方案

You need to make correct deep copy of the whole entity graph - the best way is to serialize the original entity graph to memory stream and deserialize it to a new instance. Your entity must be serializable. It is often used with DataContractSerializer but you can use binary serialization as well.

这篇关于复制实体框架对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆