在Entity Framework 4中使用存储库/ uow模式的多个ObjectContexts
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Entity Framework 4中使用存储库/ uow模式的多个ObjectContexts相关的知识,希望对你有一定的参考价值。
我在asp.net Web应用程序中使用EF4和StructureMap。我正在使用工作模式的存储库/单元作为detailed in this post。在代码中,有一行代表在Global.asax中委托ObjectContext的设置。
EntityUnitOfWorkFactory.SetObjectContext(() => new MyObjectContext());
在网页代码隐藏中,您可以创建一个通用的存储库接口,如此...
IRepository<MyPocoObject> ds = ObjectFactory.GetInstance<IRepository<MyPocoObject>>();
我的问题是重构这段代码的好方法是什么,以便我可以使用多个ObjectContext并在代码隐藏中区分它们?基本上我的应用程序中有两个数据库/实体模型,需要在同一页面上查询它们。
工作单元用于管理跨多个存储库的持久性,而不是多个对象上下文。
您无法使用工作单元在多个上下文中保留更改,因为UoW只是作为ObjectContext的包装器实现的。因此,您需要两个单位的作品。
总的来说,事情会变得混乱。你将要新建两个OC并处理每个HTTP请求,更不用说事务管理将成为一场噩梦。
你必须有两个ObjectContexts吗?这是什么原因?如果是可扩展性,请不要打扰;对于诸如存储库,工作单元和http范围管理之类的其他事情来说,这将太痛苦了。
如果没有看到如何设置存储库,就很难提供好的建议。
尝试为每个对象上下文创建包装类,每个实现IUnitOfWork和一个辅助唯一接口(IEfSqlContext1等代表您的模型/上下文之一)。
然后你可以注入你想要的任何上下文。
正如我所说,尽量避免使用两个EDMX /上下文。这比它的价值更麻烦。
以上是关于在Entity Framework 4中使用存储库/ uow模式的多个ObjectContexts的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework 4.1 和 NHibernate 的获取策略封装
如何在 Entity Framework 4.1 中使用更新 SPROC
如何使用 Entity Framework Core 模拟异步存储库
如何将针对 Entity Framework .Net 4.6.1 的库与 .Net Core 应用程序一起使用