0

Entity Frameworkでエンティティの挿入を無効にする方法はありますか?

私は DDD を使用していますが、特定の境界付けられたコンテキストでは、users テーブルの必須データベース フィールドの一部が (このコンテキスト内で) 意味をなしません。したがって、ユーザーエンティティからそれらを削除したいのですが、そうすると、新しいユーザーをデータベースに保存する機能が失われます。このコンテキストでは、ユーザーを作成するべきではないため、これは問題ありません。

私が最初に考えたのは、User Entity への挿入を無効にする (ただし、更新を許可する) ことでした。

それは実現可能ですか?または、この状況に対する別の解決策はありますか?

4

1 に答える 1

2

挿入を無効にすることはできませんが、エンティティが挿入用にマークされているかどうかを確認し、そのような場合に例外を発生させることができます。

SaveChangesこのような処理を行うのに最適な場所は、メソッドのオーバーライドです。

public override int SaveChanges(SaveOptions options)
{
    if (ObjectStateManager.GetObjectStateEntries(EntityState.Added)
                          .Where(e => !e.IsRelationship)
                          .Select(e => e.Entity)
                          .OfType<User>()
                          .Any())
    {
        throw new InvalidOperationException("User cannot be inserted");
    }

    return base.SaveChanges(options);
}

これは実行時の動作ですが、EF は変更操作間で違いがないため (すべてが single 内にありSaveChangesます)、コンパイル時に挿入を検出できません。

于 2012-06-11T09:16:08.820 に答える