在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 应用程序一起使用

Entity Framework 4 / POCO - 从哪里开始? [关闭]

Entity Framework 4.1 - 映射错误的模式