【发布时间】:2011-01-29 12:03:41
【问题描述】:
我已经编程了一段时间,并且之前使用过 LINQ-To-SQL 和 LINQ-To-Entities(尽管在使用实体时它一直处于 Entity/Table 1-1 关系上 - 即与 L2SQL 没有太大区别)
我一直在阅读有关控制反转、工作单元、POCO 和存储库模式的大量资料,并希望在我的新应用程序中使用这种方法。
我正在努力寻找一个清晰、简明的 EF4 初学者指南,它不假定你了解 EF1。
我需要回答的具体问题是:
代码优先/模型优先?关于 EF4 的优缺点(即,如果我先编写代码,稍后更改代码并需要重新生成我的数据库模型,会发生什么情况 - 数据是否得到保留、转换或删除?)
假设我将使用代码优先(我想看看 EF4 如何将其转换为 DB 架构)我该如何真正开始?我经常看到带有实体图的文章说“所以这是我的实体模型,现在我要......” - 不幸的是,我不清楚他们是否在设计器中创建了模型,将其保存到生成代码然后停止任何进一步的自动代码生成 - 或者 - 他们已经编码(POCO)?类并以某种方式将它们导入到设计者视图中?
我想我真正需要的是了解“魔法”从何而来,以及如果我不只是直接从数据库生成 EF 模型,如何自己添加它。
我知道这个问题有点含糊,但我不知道我不知道什么 - 所以任何输入/更正/澄清都值得赞赏。
不用说,我不希望有人坐在这里教我 EF - 我只是想要一些好的教程/论坛/博客/等等。对于完整的实体新手
【问题讨论】:
-
对连接的生命周期非常小心:bit.ly/fi83NV 在将上下文抽象到存储库中时,您应该真正意识到这一点。它可能看起来正在工作,但实际上正在慢慢启动越来越多的开放连接
-
@BRitishDeveloper - 非常好的建议。这确实让我们发现了问题,但以相反的方式 - 我们使用 IoC 容器来检索存储库,并且遇到了一个问题,即分配给存储库的上下文会在一段时间后关闭连接,但不会被标记为已处置/相似的。我们最终使用 IsDisposed() 扩展了上下文,它检查了通常的处理状态和连接状态,允许我们在需要时构建另一个。
-
另一个方便的提示是,在获取新上下文时,与旧上下文关联的对象将没有适当的更改跟踪,并且会导致上下文不匹配问题 - 所以如果你有一个很长的- 运行应用程序并在执行过程中更改上下文,您需要重新检索所有实体。为了让它更有趣,我们实际上有时不得不让 2 个并排运行,最后编写了一些代码来很好地在 2 个之间映射......
-
@Basiclife 我遇到了同样的问题 :) 一段时间以来,我一直想写下我关于更新分离实体的想法,而你只是鼓励我这样做:britishdeveloper.co.uk/2011/03/…
标签: entity-framework entity-framework-4 linq-to-entities poco