【问题标题】:Has anyone got a good example of unit of work with multiple repositories that is not using EF?有没有人有一个很好的例子来说明具有多个不使用 EF 的存储库的工作单元?
【发布时间】:2013-02-05 00:06:18
【问题描述】:

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

我有:

MVC 服务层 (BLL)

存储库层

多种类型的数据库

我希望我的服务层通过我的 IOC 容器将 IUnitOfWork 传递给它。 (这很简单,不是这个问题的一部分)。

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

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

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

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

所以,如果我想在 ONE 工作单元调用中包装对 SQL 数据库和 oracle 数据库的更新,那么工作单元就是这样做的方法。

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

谢谢 俄罗斯

【问题讨论】:

    标签: asp.net-mvc unit-of-work


    【解决方案1】:

    UnitOfWork 范围本质上已经在 MVC 中定义,因为您的所有逻辑都在一个操作中完成。我见过的常见模式(以及我最终在我的应用程序中所做的)是通过您全局注册到您的应用程序的属性来处理您的工作单元,并处理设置您需要的任何工作单元逻辑(事务等)在该属性的OnActionExecutingOnActionExecuted 中。有一些注意事项,例如确保该操作不是子操作并检查 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

    【讨论】:

    • 感谢您的回答Yarx
    猜你喜欢
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多