我正在使用 micro-orm (dapper) 并试图为我的存储库提供一个工作单元 (UoW) 实现。我有点难过如何最好地处理我的 UoW 中的父子(外键)关系。例如,如果我有以下两个直接映射到数据库表的实体:
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 外键属性然后也插入到数据库中。我只是想知道是否有人以一种很好的通用方式解决了这类问题?