c# - asp.net mvc 应用程序中的工作单元模式

标签 c# asp.net-mvc nhibernate unit-of-work

我一直在看这个优秀的blog标题为“NHibernate 和工作单元模式”,并且有一个关于在 asp.net mvc 项目中使用 UnitOfWork.Start 的最佳位置的问题。

我的 SLN 分为以下项目:-

 MVC project
 Repository
 NHibernateUnitOfWork

我有一个接口(interface):-

 public interface INameRepository
 ...
       IList<Name> GetByOrigin(int OriginId)
 ...

我有一个具体的实现

     public class NameRepository : INameRepository
     ...
          public  IList<Name> GetByOrigin(int OriginId) {
                using (UnitOfWork.Start()) {
                     var query = session.Linq<...
                     return query;
                }
          }
     ...

我的问题是我是使用 using(UnitOfWork.Start()) 将我的所有方法包装在我的所有存储库中还是有更好的方法?

我正在使用 nHibernate,asp.net mvc。

最佳答案

使用工作单元模式,您不必将每个数据访问方法都放在一个单独的工作单元中。您围绕需要完成的整个工作使用工作单元,这在大多数情况下在 Web 应用程序中是一个 Web 请求。这个想法是请求可以失败,也可以成功。当您在一个请求期间向数据库添加 2 个项目时,应该同时添加或不添加。不只是其中之一。在大多数情况下,在 mvc(或其他 Web)应用程序中启动工作单元的最简单方法是在 global.asax 的开始和结束请求方法中

class Global
{
    BeginRequest()
    {
        servicelocater.get<unitofwork>().start();
    }

    EndRequest()
    {
        var unit = servicelocater.Get<Unitofwork>();
        try
        {
            unit.commit();
        }
        catch
        {
            unit.rollback();
            throw;
        }
    }
}

class Repository<T>
{
     public Repository(INHibernateUnitofwork unitofwork)
     {
         this.unitofwork = unitofwork;
     }

     public void Add(T entity)
     {
         unitofwork.session.save(entity);
     }
}

关于c# - asp.net mvc 应用程序中的工作单元模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1981865/

相关文章:

c# - 如何在新选项卡或窗口中打开 PDF 文件而不是使用 C# 和 ASP.NET MVC 下载它?

javascript - 如何从html弹出窗口返回值

Nhibernate C# - 仅返回字符串属性不为 null 或空的对象

NHibernate 代码优先迁移管理工具,如 EntityFramework、Django-South

c# - 脚手架 EntityFramework 6 无法将类型为 'System.Data.Entity.Core.Objects.ObjectContext' 的对象转换为 'System.Data.Objects.ObjectContext'

c# - 在 C# 中,如何将默认获取与显式设置混合使用?

c# - Entity Framework ——规范函数与 Linq 有何不同——Linq-to-Entities 与规范函数

.net - MVC 个人帐户和 Web API Azure AD

nhibernate - 通过 nuget 安装了 Nhibernate Profiler,但现在我的项目无法运行

c# - PayPal Adaptive Payment Api 预填充用户数据