2

EntityKey なしで ObjectContext から取得したオブジェクトを MemberwiseClone することは可能ですか? C# で Entity Framework 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();
    }
}

私の問題に対する簡単な解決策を知っている人はいますか?

4

1 に答える 1

3

MemberwiseCloneすべてのメンバーをコピーします。メンバーのコピーを避けたい場合は、独自のクローンを作成する必要があります。これが不可能なのには十分な理由があります。EntityKeyエンティティを一意に識別し、不変です。一度設定すると変更できず、そのため、キーの作成に使用されるプロパティ (モデルでキーとしてマークされているプロパティ) を変更することはできません。EntityKeyも参照型であるため、元のエンティティのメンバーごとのクローンを作成することで、同じキー インスタンスを参照します。そのようなエンティティは役に立たないでしょう。

于 2012-12-03T11:07:40.970 に答える