質問: 私は自分のスキーマ/テーブルをモデル化するために使用されるSQLデータモデル(EF Core 1.1を使用)を最初に持っています。しかし、私はまた、これらのSQLデータモデルの部分またはフルマップバージョンであるドメインオブジェクトを持っています。本質的には、SQLデータモデルと同じ形をしています。 複雑なオブジェクトがトラッキングされたコンテキストのコンテキスト外で変更されている場合、カスケード更新を処理する最も良い方法は何ですか。私のすべてのドメイン操作が追跡されたエンティティ上で行われないと考えると、それらはドメインオブジェクト上で起こります。 短く、これは私が達成しようとしているものです。 1)データベースからエンティティを読み込みます。 2)エンティティをドメインオブジェクトにマッピングする。 3)ドメインオブジェクトに更新を適用します。 4)ドメインオブジェクトをエンティティにマップする。 5)マッピングされたエンティティに対してデータベース更新を適用することで、エンティティとその関連するエンティティが更新される。 ところで、エンティティとドメインオブジェクトは典型的な多対1の関係を持っています。これを行う最善の方法は何ですか?
回答: > これを行う最善の方法は何ですか? > > 私は、これについて最善の方法は、明示的な永続性をモデル化する必要を避けるために、あまりにも多くの妥協を避けるためにドメインオブジェクトを直接データベースにマッピングするのに十分な柔軟性を持つフレームワークを使用することによって、まず問題を回避することですモデル内のモデル。 > 本質的には、SQLデータモデルと同じ形をしています > > これは、ドメインモデル(オブジェクトモデル)とリレーショナルDBモデルの間で、ドメインモデルと明示的な永続性モデルのインピーダンスのミスマッチが同じであることを意味します。 Vaughn Vernon がDDDとEntity Frameworkを使ってモデリング集計で説明しているマッピングを実行するためのエレガントな方法があります。基本的には、実際のドメインオブジェクトによってカプセル化され維持されているgetter / setterのバッグである明示的な状態オブジェクトに状態を格納するようになっています。これらの状態オブジェクトは、EFでマップされます。 例えば上記のリンクされた記事から取られた ``` public class Product { public Product( TenantId tenantId, ProductId productId, ProductOwnerId productOwnerId, string name, string description) { State = new ProductState(); State.ProductKey = tenantId.Id + ":" + productId.Id; State.ProductOwnerId = productOwnerId; State.Name = name; State.Description = description; State.BacklogItems = new List(); } internal Product(ProductState state) { State = state; } ... } ```