ユニット作業パターン - 親子関係の管理

c# dapper design-patterns orm unit-of-work

質問

私はmicro-orm(dapper)を使用しており、私のリポジトリにUnit Of Work(UoW)実装を使用しようとしています。私は私のUoWで親子(外来のキー)の関係をどのように扱うのが最善かを少し困惑しています。たとえば、データベーステーブルに直接マップする次の2つのエンティティがある場合、

public class User
{
    public int Id { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string Name { get; set; }
    public int ClientDatabaseId { get; set; }

    public ClientDatabase ClientDb { get; set; }
}

public class ClientDatabase
{
    public int Id { get; set; }
    public string DataSource { get; set; }
    public string FailoverPartner { get; set; }
    public string InitialCatalog { get; set; }
}

ユーザーが外部キーUser.ClientDatabaseIdを使用してClientDatabaseとの親子関係を持つ場所。 UserとClientDatabaseの両方のIdプロパティは、Identity列です。私のUoWインターフェースは次のように定義されています:

public interface IUnitOfWork
{
    void MarkDirty(object entity);
    void MarkNew(object entity);
    void MarkDeleted(object entity);
    void Commit();
    void Rollback();
}

ある時点で、同じIUnitOfWork内で、ClientDatabaseとUserの両方に対してMarkNew()を呼び出し、次にCommit()を呼び出したいとします。今私がしたいのは、ClientDatabaseが最初に(子エンティティ)保存され、その後ClientDatabaseに設定されたIdのために、それがデータベース挿入の結果として、UserのClientDatabaseId外部キープロパティとして設定されることですデータベースにも挿入されます。私はちょうど誰かが素敵な一般的な方法でこの種の問題を解決したかどうか疑問に思った?

受け入れられた回答

なぜあなたはUserクラスを集約ルートとして使用しないのですか?したがって、コードのためのデータベースへの挿入を行う前に、ClientDatabaseがnullでないかどうかがチェックされます。 nullでない場合は、Idプロパティをチェックして、新しいClientDatabaseか既存のClientDatabase(挿入または更新を行う必要があるかどうかを判断する)を確認できます。 ClientDatabaseIdプロパティに値を設定できます。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ