C# 访问存储库中的UnitOfWork是一种糟糕的设计吗?

C# 访问存储库中的UnitOfWork是一种糟糕的设计吗?,c#,asp.net-mvc-4,transactions,entity-framework-4.1,unit-of-work,C#,Asp.net Mvc 4,Transactions,Entity Framework 4.1,Unit Of Work,背景:实体框架4.1和MVC4 我的设置有模型实体,然后是通用存储库,然后是从通用存储库继承的特定于模型的存储库,如UserRepository、ProductRepository 然后我有了一个服务层,它将这些存储库与任何业务逻辑一起使用,可以在这里访问UnitOfWork对象来调用Commit。 根据工作单元模式,我的问题是: 让存储库层访问UnitOfWork对象的设计是否糟糕? 对我来说,这似乎是一个“漏洞”,因为现在事情可能会在你甚至没有意识到的时候发生 这是正确的吗 e、 g 现在,

背景:实体框架4.1和MVC4

我的设置有模型实体,然后是通用存储库,然后是从通用存储库继承的特定于模型的存储库,如UserRepository、ProductRepository

然后我有了一个服务层,它将这些存储库与任何业务逻辑一起使用,可以在这里访问UnitOfWork对象来调用Commit。

根据工作单元模式,我的问题是:

让存储库层访问UnitOfWork对象的设计是否糟糕?

对我来说,这似乎是一个“漏洞”,因为现在事情可能会在你甚至没有意识到的时候发生

这是正确的吗

e、 g

现在,如果其中任何一个调用失败,将不会调用commit


但是,如果在abcRepository层中,您可以访问UofW对象并调用commit,那么它的行为将不一致。

我认为这是实现存储库和UnitofWork的正确方法


我认为存储库不应该访问u-o-w,正如Matthew已经评论的那样。你的问题很好地回答了自己

回复:如果其中任何一个调用失败,将不会调用commit。-


一般来说,这是好的,对吗?您不想部分提交更改

在我看来,创造工作单位的人应该承担责任。存储库可能没有该特定工作单元的整个上下文。我以前看到的
UnitOfWork
方式是
UnitOfWork
可以访问存储库,而不是相反的方式。@Matthew所以在我的例子中,这将在MVC控制器中,然后我将其传递给ABCService类。我认为这是有意义的,@Charles380的建议听起来很适合我。
public class ProductService
{


   public void SaveProduct(Product product)
   {
      try
      {
        productRepository.Save(product);
        statsRepository.Update(product);
        this.UnitOfWork.Commit();
      } catch(..) 
      {
            //
      }
      finally()
      {
        //
      }


   }

}