小编jdm*_*nty的帖子

工作单元和存储库模式之间的交互

在阅读了大量文章之后,我仍然不确定在与存储库交互时工作单元模式的职责.

存储库负责加载和保存聚合根实体,因此请考虑以下示例代码:

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

19
推荐指数
1
解决办法
3601
查看次数