没有EntityKey的MemberwiseClone

时间:2012-12-02 18:42:21

标签: c# entity-framework-4.1

成员可以在没有EntityKey的情况下从ObjectContext中检索一个对象吗?我正在使用带有C#的实体框架4.1

如果我尝试更改ID,我会收到以下异常:

The property 'Id' is part of the object's key information and cannot be modified

如果我尝试将EntityKey设置为null:

The EntityKey property can only be set when the current value of the property is null.

我的代码:

Offer newOffer = offer.ShallowCopy();
// does not work...
newOffer.EntityKey = null;
/ does not work either...
newOffer.Id = Guid.NewGuid()
this._context.Add<Offer>(newOffer);
this._context.SaveChanges();

...

public partial class Offer
{
    public Offer ShallowCopy()
    {
        return (Offer)this.MemberwiseClone();
    }
}

有没有人知道我的问题的简单解决方案?

1 个答案:

答案 0 :(得分:3)

MemberwiseClone复制所有成员。如果您想避免复制任何成员,您必须自己进行克隆。有一个很好的理由说明这是不可能的。 EntityKey唯一标识实体,它是不可变的。设置后,您无法更改它,因此您无法更改用于构建密钥的任何属性(标记为模型中的键的属性)。 EntityKey也是引用类型,因此通过创建原始实体的成员明智克隆,您将引用相同的键实例。这样的实体将毫无用处。