实体框架4/POCO-从哪里开始?

我已经编写了一段时间的程序,以前也使用过 LINQ-To-SQL 和 LINQ-To-Entity (尽管在使用实体时,它处于实体/表1-1关系中——即与 L2SQL 没有太大区别)

我已经阅读了大量关于控制反转、工作单元、 POCO 和存储库模式的文章,并希望在我的新应用程序中使用这种方法。

我挣扎的地方是找到一个清晰,简明的 EF4入门指南,不假定 EF1的知识。

我需要回答的具体问题是:

代码优先/型号优先?关于 EF4的优缺点(例如,如果我先编写代码,稍后更改代码并需要重新生成数据库模型——数据是被保留和转换还是删除?)

假设我是代码优先(我想看看 EF4是如何将其转换为数据库模式的) ,那么我实际上是如何开始的呢?我经常看到有实体图的文章说“这是我的实体模型,现在我要... ...”-不幸的是,我不清楚他们是否在设计器中创建了模型,保存它来生成代码,然后停止任何进一步的自动代码生成-或者-他们已经编码(POCO) ?类,并以某种方式将它们导入到设计器视图中?

我想我真正需要的是理解“魔术”从何而来,以及如何添加它自己,如果我不只是生成一个 EF 模型直接从数据库。

我知道这个问题有点模糊,但我不知道我不知道什么-所以任何输入/更正/澄清感谢。

不用说,我不期望任何人坐在这里教我 EF-我只是想一些好的教程/论坛/博客等完整的实体新手

47727 次浏览

这是一个关于实体框架的 POCO 模板的 演练,看起来很不错。您可能还想检查一下 ADO.NET 团队博客。如果你想从头开始(EF v1.0)作为你的 EF 知识的基础,我发现 Julia Lerman 的 编程实体框架书非常完整。

你可以拿勒曼的书或者更简单的“临林克对象关系映射”。对于 POCO,所有的概念都是一样的,只是现在应该禁用代码生成,并在 edmx csdl 中直接映射到模型(或者创建自己的 POCO 生成器)。所有的映射原理也是一样的。无论如何,在运行时您使用的代理是从您的 POCO 对象派生的,因此您应该关心拦截支持(您的 POCO 属性的虚拟化)。

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

它首先给你一步一步的代码,它需要 CTP3 for EF4(从那篇文章下载链接)。

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

我建议您花半个小时左右的时间,在当前的 VS 中生成一个稳定的 EF1.0模型,这将使您在理解 EF 4.0的隐喻和概念方面有很长的路要走。只要创建一个简单的客户,产品和订单数据库... 我建议做你自己的,而不是使用北风。

这些文章可能会引起人们的兴趣... ... 这个系列真正深入探讨了 POCO 方法的优点和缺点。

林克

林克

林克

在这些文章中,作者提到了以后的文章,这些文章描述了实现 Repository 和 Unit of Work 模式的最佳实践,但是我找不到它们。这些文章写得很好,我想从这个作者阅读更多。

茱莉亚 · 勒曼的 一系列精彩的介绍性视频每人大约10分钟。它们是介绍性的,但是有很多实用的技巧可以帮助你克服一些潜在的学习障碍。我尤其喜欢她演示如何使用 SQLServer 事件探查器观察实际的 SQL。

不要让代表来评论一个答案,但这里有一个 Jinkinz 答案的后续:

在实体框架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

我正在寻找相同的答案,结果发现了 http://www.dotnetcurry.com/ShowArticle.aspx?ID=599

在链接的末尾,有几个链接将让您与实体框架4滚动。

希望这个能帮上忙

这是一个很好的问题,但随着实体框架的不断成熟,很难跟上时代的步伐。也许最好的地方开始,将保持最新的未来是 微软 EF 页面

我发现其他一些有用的链接,而谷歌(重点关注代码优先) :

如果您打算使用断开连接的场景,我建议您阅读 Julie Lerman 的书: 《编程 DbContext 》 ,特别是第4章。

我在博客中发现了很多例子,但是几乎所有的都是关于连接的场景。

我也开始了。这本书帮了我很大的忙。顺便说一下,我给她买了三本书。

好多答案啊。如果有一个示例包含一个经过调整的 T4模板版本,可以生成 POCO + 接口 + 存储库呢?

Https://entityinterfacegenerator.codeplex.com