在阅读了大量文章之后,我仍然不确定在与存储库交互时工作单元模式的职责.
存储库负责加载和保存聚合根实体,因此请考虑以下示例代码:
using(IUnitOfWork uow = container.CreateUnitOfWork())
{
Repository<ARoot> roots = container.GetRepository<ARoot>();
ARoot root = root.FindByName("ARoot");
root.Name = "ANewName";
roots.Save(root);
uow.Commit();
}
Run Code Online (Sandbox Code Playgroud)
工作单元接口将使用以下方法定义:
public interface IUnitOfWork
{
void Insert(object);
void Update(object);
void Delete(object);
void Commit();
void Rollback();
}
Run Code Online (Sandbox Code Playgroud)
可以说存储库是使用非常简单的SQL Mapper实现的,因此FindByName包含一些直接SQL来返回ARoot,Save实现是否如下所示:
public void Save(T entity)
{
IUnitOfWork uow = GetUnitOfWork();
// Tell the UOW we are updating this entity
uow.Update(entity);
}
Run Code Online (Sandbox Code Playgroud)
然后,工作单元提交代码将构造所有必需的SQL以将实体映射回数据库?
问题2)
如果我将聚合根添加到工作单元中,工作单元是否负责持久化根及其子工具,或者应该是存储库的Save方法将已更改的实体添加到工作单元中?例如
public void Save(T entity)
{
IUnitOfWork uow = GetUnitOfWork();
// Tell the UOW we are updating this entity …Run Code Online (Sandbox Code Playgroud) c# domain-driven-design repository unit-of-work repository-pattern