私はマイクロオーム (ダッパー) を使用しており、リポジトリで使用する作業単位 (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 は、外部キー User.ClientDatabaseId を介して ClientDatabase と親子関係を持っています。User と ClientDatabase の両方の Id プロパティは ID 列です。私の 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 外部キー プロパティとして設定されることです。もデータベースに挿入されます。誰かがこの種の問題を素敵な一般的な方法で解決したかどうか疑問に思いましたか?