0

我即将用 MVC3 实现工作单元模式。

我有:

MVC 服务层 (BLL)

存储层

多种类型的数据库

我希望我的服务层让 IUnitOfWork 由我的 IOC 容器传递给它。(这很容易,不是这个问题的一部分)。

所以我的服务层会这样做:(注意:这是伪代码)

(using unitOfWork)
{
   ProductSqlRepository.Update();
   PersonOracleRepository.Update();
   IUnitOfWork.Commit();
}

我能找到的所有样本都使用 EF。虽然我的一个存储库可能使用 EF,但其他存储库可能不使用。

那么我的问题是,我是否可以在多个存储库中使用工作单元模式,这些存储库可能位于不同类型的数据库之上(即……EF、Oracle……其他)

因此,如果我想在一个工作单元调用中包装对 SQL 数据库和 Oracle 数据库的更新,那么工作单元就是这样做的方法。

正如我所提到的,我能找到的所有示例都是针对 100% EF 解决方案的,我需要混合搭配。

谢谢RuSs

4

1 回答 1

1

UnitOfWork 范围本质上已经在 MVC 中定义,因为您的所有逻辑都在一个操作中完成。我见过的常见模式(以及我最终在我的应用程序中所做的)是通过您全局注册到应用程序的属性来处理您的工作单元,并处理设置您需要的任何工作单元逻辑(事务等)在该属性的OnActionExecutingand中。OnActionExecuted有一些注意事项,例如确保该操作不是子操作并检查 ModelState 错误,但在线上有这样的示例。另请注意,如果您没有在视图中专门使用视图模型,则在工作单元范围关闭后,您可能会遇到某些框架在视图中延迟加载数据的问题。

我的项目使用了 nHibernate,我将这两篇文章作为我实施的灵感。希望他们也能给你一些想法。

http://ayende.com/blog/4809/refactoring-toward-frictionless-odorless-code-what-about-transactions

http://slynetblog.blogspot.ca/2011/04/lightweight-nhibernate-and-aspnet-mvc.html

于 2013-02-05T16:00:52.667 回答