2012-03-24 40 views
0

我已经使用EF 4.0使用存储库模式在MVC3中构建了一个站点。一切都很顺利,但我开始遇到很多“两个对象之间的关系无法定义,因为它们附加到不同的ObjectContext对象”错误。看起来,我的存储库层让所有的上下文都混在一起,所以我认为启动一个新的EF4.1项目可能会更容易一些。实体框架4.1 - 疯狂的选项数量

起初我考察了Repository Pattern +工作单元,但发现有些线程表示EF4.1并不需要这个。我遇到this线程说“DbContext是工作单元模式的实现,IDbSet是存储库模式的实现”。我想,也许那时我可以使用它。经过进一步的检查,尽管DbContext似乎使用了Code First方法,但据我所知,如果POCO发生变化,我会再次删除并重新创建数据库。我需要将数据保存在我的数据库中,所以据我所知可以选择。

我的脑袋现在旋转EF选项。 EF4.1需要存储库模式吗? DbContext是否适用于已经充满数据的数据库?有没有更好的方法来管理不涉及这些的实体上下文?

任何推向正确的方向将是伟大的=/

回答

1

一些评论。有关详情,我建议使用搜索引擎进行一些基础研究。

...我开始碰到很多的“两个 对象之间的关系,不能被定义,因为它们连接到不同的 ObjectContext的对象”的错误。看起来我的存储库层是 ,所有混淆的上下文,所以我觉得它可能只是 更容易启动一个新的EF4.1项目。

如果你有这个错误,你做错了什么。 EF 4.1不会保护您再次犯同样的错误,因为您也无法更改连接到不同DbContext的对象之间的关系。您只需分析和调试您的代码并找出问题的根源。

...此线程说“DbContext是工作单元的实现 模式,IDbSet是存储库模式的实现”。我 想也许那我可以只使用...

ObjectContextObjectSet<T>是这些模式的实现,以及。这不是更改实体框架版本的理由。

经过进一步的检查虽然看似的DbContext,使用代码 优先的方法...

您还可以使用数据库优先和模型优先的做法与DbContext

...这,据我可以告诉就会下降,并重新创建数据库 如果波苏斯变化。我需要将数据保存在我的数据库中,因此我至少可以告诉 这个选项已经结束。

您可以关闭该功能。此外,EF 4.3具有迁移功能,可帮助更新和演进现有数据库模式。

EF4.1需要存储库模式吗?

不,对于ObjectContext也不需要。确切地说,您不需要编写自己的(抽象)EF顶层存储库,因为EF已经是该模式的实现。

DbContext是否适用于已经装满 数据的数据库?

是的。从代码(Code-First)创建数据库的附加功能主要是用于应用程序开发阶段的生产力工具,该工具应该在生产中被禁用。

+0

有趣。看起来像4.1会给我提出同样的问题,所以我可能最好,正如你所说,只是解决当前的问题。很多好用的指针虽然使用,欢呼! – boolean 2012-03-24 23:04:16

+0

@boolean:BTW,当前版本'DbContext'/Code First是EF 4.3.1。如果您考虑升级,请直接转到该版本。 – Slauma 2012-03-24 23:08:48