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

Posted

技术标签:

【中文标题】Entity Framework 4 / POCO - 从哪里开始? [关闭]【英文标题】:Entity Framework 4 / POCO - Where to start? [closed] 【发布时间】: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/… 【参考方案1】:

这些文章可能很有趣……该系列文章真正探讨了 POCO 方法的优缺点。

http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx

http://blogs.msdn.com/b/adonet/archive/2009/05/28/poco-in-the-entity-framework-part-2-complex-types-deferred-loading-and-explicit-loading.aspx

http://blogs.msdn.com/b/adonet/archive/2009/06/10/poco-in-the-entity-framework-part-3-change-tracking-with-poco.aspx

在这些文章中,作者提到了未来的文章,这些文章描述了实现存储库和工作单元模式的最佳实践,但我找不到它们。这些文章写得很好,我想从这位作者那里阅读更多内容。

【讨论】:

作为已经熟悉使用设计器的实体框架的人,这是对 POCO 的一个很好的介绍。 如果您正在寻找工作单元跟进它位于blogs.msdn.com/b/adonet/archive/2009/06/16/…【参考方案2】:

我遇到过这个:http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-code-only-for-the-entity-framework.aspx

首先让您逐步了解代码。它确实需要 EF4 的 CTP 3(从该文章链接下载)。

这与我所追求的非常接近(尽管理想情况下不依赖 CTP 的解决方案会更好)

【讨论】:

注意:这个 CTP 最初是用于 VS2010 Beta,但也支持 VS2010 RTM。【参考方案3】:

我确实建议您花半小时左右的时间在您当前的 VS 中生成一个稳定的 EF1.0 模型。这将使您在理解 EF 4.0 的隐喻和概念方面有很长的路要走。只需创建一个简单的 Customer、Products 和 Orders db...我建议您自己创建而不使用 Northwind。

【讨论】:

【参考方案4】:

这是一个很好的问题,但随着 Entity Framework 的不断成熟,很难跟上时代的步伐。可能最好的起点是Microsoft's EF page。

我在谷歌搜索时发现其他一些有用的链接(专注于代码优先):

Getting Started with EF using MVC Tutorial Code First Development with Entity Framework TechEd 2010 视频 Scott Gu 在Code-First Development with EF4 上的帖子 MSDN Entity Framework 4.1 and 4.2

【讨论】:

【参考方案5】:

您可以阅读 Lerman 的书或诸如“Pro linq 对象关系映射”之类的更简单的书。 POCO 的所有概念仍然相同,只是现在您应该禁用代码生成并直接映射到 edmx csdl 中的模型(或创建自己的 POCO 生成器)。所有映射原则也相同。无论如何,在运行时您正在使用从您的 POCO 对象派生的代理,因此您应该关注拦截支持(您的 POCO 属性的虚拟化)。

【讨论】:

【参考方案6】:

还有这些教程:

https://danielwertheim.wordpress.com/2010/05/16/entity-framework-4-ctp3-code-first-vs-linq-to-sql/ https://danielwertheim.wordpress.com/2009/12/20/updates-to-putting-entity-framework-4-to-use-in-a-business-architecture/

【讨论】:

他的项目结构看起来就像我正在处理的一个基于 nHibernate 的旧项目。接受所有 WCF 爵士乐,我热衷于让自己焕然一新。可靠的链接。【参考方案7】:

这是一个关于实体框架的 POCO 模板的 walkthrough,看起来不错。您可能还想查看ADO.NET team blog。如果您想从头开始(EF v1.0)作为您 EF 知识的基础,我发现 Julia Lerman 的 Programming Entity Framework 书非常完整。

【讨论】:

谢谢 - 我没有看过这本书,但我已经阅读了提供的两个链接。模板演练有助于解释如何将附加功能添加到 POCO 对象,一旦它们被定义(例如延迟加载),但(我可能在这里遗漏了一些明显的东西)它实际上并没有解释如何开始(即简单地按指定创建一个类不会使其成为实体,也不会将其与模型相关联)我在博客上也有过类似的经历。不过我会考虑买这本书 - 看起来很有希望 - 谢谢。 关于 Julia Lerman 的书,值得一提的是,她正在编写涵盖 EF4 的第二版:learnentityframework.com/LearnEntityFramework/book/…。我记得我在某个地方读到过,计划的发布日期是今年 5 月,但我再也找不到源了。我也刚刚找到这个网站:nakedobjects.net/home/index2.shtml Slauma,你提供的链接看起来正是我所需要的——除了它使用的是第 3 方“Naked Obects”库,它似乎以某种方式混淆了复杂性——有一分钟,我以为你会破解它【参考方案8】:

没有代表对答案发表评论,但这里是 Jinkinz 答案的跟进:

在 Entity Framework 4.0 中使用存储库和工作单元模式:

http://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx

【讨论】:

【参考方案9】:

Julia Lerman 有a nice series of introductory videos,每人约 10 分钟。它们是介绍性的,但有很多实用技巧可以消除一些潜在的学习障碍。我特别喜欢她使用 SQL Server Profiler 观看实际 SQL 运行的演示。

【讨论】:

【参考方案10】:

如果你打算使用断开连接的场景,我建议你阅读 Julie Lerman 的书:“Programming DbContext”,特别是第 4 章。

我在博客等中找到了很多示例,但几乎所有示例都是关于连接场景的。

我也开始了。这些书对我帮助很大。顺便说一句,我给她买了三本书。

【讨论】:

【参考方案11】:

我一直在寻找相同的答案并遇到了http://www.dotnetcurry.com/ShowArticle.aspx?ID=599

在链接的末尾,有几个链接可以让您使用 Entity Framework 4。

希望对你有帮助

【讨论】:

【参考方案12】:

哇,很多答案。一个包含 T4 模板的调整版本的示例怎么样?这些模板完全生成 POCO + 接口 + 存储库?

https://entityinterfacegenerator.codeplex.com

【讨论】:

对于测试存储库/上下文很有趣且很方便,但是为什么您需要自己抽象实体呢?根据定义,它们内部不应包含任何功能代码。 你是对的。大多数情况下,人们不需要单独的接口。但它确实可以帮助那些想要解决循环引用并想要与第三方共享接口而不是实际类的人。如果您的公司需要通过 3rd 方集成的审核,这将有很大帮助,而无需在共享中进行详细实施。

以上是关于Entity Framework 4 / POCO - 从哪里开始? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework 4.1 RTW Code First - POCO 一对多是不是需要引用子实体和子实体主键?

virtual 关键字在 Entity Framework 4.1 POCO Code First 中可以产生啥影响?

添加 [DataContract] 到 Entity Framework 6.0 POCO Template

Entity Framework 4.1Code First 连接到 Sql Server 2005

Entity Framework工具POCO Code First Generator的使用

Entity Framework 4.1 - 映射错误的模式