加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 实体框架4.1代码优先 – 在存储库之间共享dbCont

发布时间:2020-12-16 10:00:33 所属栏目:asp.Net 来源:网络整理
导读:我遇到了多个上下文的问题,并且出现的主要解决方案是在存储库之间共享上下文但是我没有找到关于如何执行此操作的良好示例. 作为参考,我使用MVC Web App连接到我的数据层.我希望每个用户请求有一个上下文(假设这是正确的). 谢谢, 编辑 – 这是我在BrokenGlass
我遇到了多个上下文的问题,并且出现的主要解决方案是在存储库之间共享上下文但是我没有找到关于如何执行此操作的良好示例.

作为参考,我使用MVC Web App连接到我的数据层.我希望每个用户请求有一个上下文(假设这是正确的).

谢谢,

编辑 –

这是我在BrokenGlass的链接和以下SO Question的帮助下的解决方案:

我基本上实现了工作单元模式和依赖注入.我应该提到除了使用MVC之外,我也在使用Ninject.

在给定的存储库构造函数中(请参阅下面的链接,了解工作单元模式详细信息):

public class PersonRepository : IPersonRepository
{
    private readonly MyContext _context;

    public PersonRepository(IUnitOfWork unitOfWork) 
    {
        if (unitOfWork == null)
            throw new ArgumentNullException("unitOfWork");

        _context = unitOfWork as MyContext;
    } 

    //...
}

在我的NinjectMVC3类的MVC应用程序中(关键是InRequestScope()方法):

private static void RegisterServices(IKernel kernel)
{
     kernel.Bind<IUnitOfWork>().To<MyContext>().InRequestScope();
     kernel.Bind<IPersonRepository>().To<PersonRepository>();
     //...
}

解决方法

您的存储库层应提供表示单个请求的 unit of work,并使用上下文对象,然后在完成请求所需的所有单个存储库上使用该上下文对象.

对于HTTP / Web应用程序,您可以在HttpContext.Current.Items中缓存db上下文,该上下文存储每个HTTP请求的共享数据.有关详细信息,请查看此类似的SO线程:attaching linq to sql datacontext to httpcontext in business layer

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读