1

シナリオ: Entity Framework 4 、POCO テンプレート、およびマスター詳細関係。

次のようなマスタータイプがあるとしましょう:

//partial implementation of master entity
partial class Master
{
    public void AddDetail(x,y,z)
    {
        var detail = new Detail()
        {
           X = x,
           Y = y,
           Z = z,
        };

        //add the detail to the master
        this.Details.Add(detail);
    }
}

その後、マスター インスタンスをコンテキストに追加してコミットすると、詳細は保存されません。

var masterObject = new Master();
masterObject.AddDetail(1,2,3);
myContext.MasterSet.AddObject(masterObject);

POCO テンプレートを使用するときに、到達可能性によって詳細を永続化する方法はありますか? それとも他の方法ですか?Master エンティティの Details コレクションは FixUpCollection であるため、IMO の変更を追跡する必要があります。

では、POCO 性を殺しすぎずにこの作業を行う方法についてのアイデアはありますか?

4

2 に答える 2

0

解決策を見つけました。

次のように SaveOptions.DetectChangesBeforeSave を渡すだけです。

context.SaveChanges(SaveOptions.DetectChangesBeforeSave);

これにより、個々の詳細をコンテキストに関連付けることなく、詳細オブジェクトをマスター オブジェクトに追加できます。

于 2010-05-21T11:45:53.803 に答える
-1

あなたができる

コンテキストを受け入れるコンストラクターをエンティティに追加します。これは、参照によってプライベートフィールドに保存されます。次にAddDetail、関数はプライベート_contextフィールドをチェックし、インスタンス化されたコンテキストを参照している場合は、マスターレコードが保存された後にコンテキストに詳細を追加します。

でも...

これは、単一責任の原則に違反しているため、最善のパターンではない可能性があります。リポジトリパターンを使用し、リポジトリに未保存の詳細をコミットさせる方がよいと思います。 これは、 EntityFramework4でのリポジトリパターンの実装に関する優れた記事です。

于 2010-05-20T15:10:01.210 に答える