在Entity Framework 4中使用存储库/ uow模式的多个ObjectContexts

问题描述 投票:1回答:1

我在asp.net Web应用程序中使用EF4和StructureMap。我正在使用工作模式的存储库/单元作为detailed in this post。在代码中,有一行代表在Global.asax中委托ObjectContext的设置。

EntityUnitOfWorkFactory.SetObjectContext(() => new MyObjectContext());

在网页代码隐藏中,您可以创建一个通用的存储库接口,如此...

IRepository<MyPocoObject> ds = ObjectFactory.GetInstance<IRepository<MyPocoObject>>();

我的问题是重构这段代码的好方法是什么,以便我可以使用多个ObjectContext并在代码隐藏中区分它们?基本上我的应用程序中有两个数据库/实体模型,需要在同一页面上查询它们。

asp.net dependency-injection entity-framework-4 repository-pattern poco
1个回答
3
投票

工作单元用于管理跨多个存储库的持久性,而不是多个对象上下文。

您无法使用工作单元在多个上下文中保留更改,因为UoW只是作为ObjectContext的包装器实现的。因此,您需要两个单位的作品。

总的来说,事情会变得混乱。你将要新建两个OC并处理每个HTTP请求,更不用说事务管理将成为一场噩梦。

你必须有两个ObjectContexts吗?这是什么原因?如果是可扩展性,请不要打扰;对于诸如存储库,工作单元和http范围管理之类的其他事情来说,这将太痛苦了。

如果没有看到如何设置存储库,就很难提供好的建议。

尝试为每个对象上下文创建包装类,每个实现IUnitOfWork和一个辅助唯一接口(IEfSqlContext1等代表您的模型/上下文之一)。

然后你可以注入你想要的任何上下文。

正如我所说,尽量避免使用两个EDMX /上下文。这比它的价值更麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.