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

时间:2011-01-17 19:55:44

标签: asp.net dependency-injection entity-framework-4 repository-pattern poco

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

然后你可以注入你想要的任何环境。

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