实体框架4 / POCO-从哪里开始?[关闭]


183

我已经编程了一段时间,并且以前使用过LINQ-To-SQL和LINQ-To-Entities(尽管使用实体时,它已经处于Entity / Table 1-1关系上-即与L2SQL并没有太大区别)

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

我在苦苦挣扎的地方是找到一个清晰,简洁的EF4入门指南,该指南不假定您掌握EF1。

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

代码优先/模型优先?关于EF4的优点/缺点(即,如果我先编写代码,以后再更改代码并需要重新生成数据库模型,会发生什么情况?数据是否得到保存,转换或删除?)

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

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

我知道这个问题有点含糊,但我不知道我不知道的-因此,感谢您的任何输入/更正/澄清。

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


3
在连接的生命周期中要非常小心:bit.ly/fi83NV在将上下文抽象到存储库时,您应该真正意识到这一点。它似乎正在运行,但实际上正在缓慢地建立越来越多的开放连接
BritishDeveloper

@BRitishDeveloper-非常好的建议。这确实确实吸引了我们,但是却以相反的方式-我们使用的是IoC容器来检索存储库,并且遇到一个问题,即分配给存储库的上下文会在一段时间后关闭连接,但不会被标记为已处置/类似。最终,我们使用IsDisposed()扩展了上下文本身,该对象检查了正常的处置状态和连接状态,从而允许我们根据需要构建另一个状态。
基本

另一个方便的技巧是,在获取新上下文时,与旧上下文关联的对象将没有适当的更改跟踪,并且会引起上下文不匹配的问题-因此,如果您有一个长期运行的应用程序,并且在执行时,您需要重新检索所有实体。为了使它更有趣,我们实际上不得不在2倍运行并排侧,最后写一些代码到2之间进行映射很好...
基本

1
@Basiclife我遇到了同样的问题:)我一直想写一下有关更新分离实体的想法,而您只是鼓励我这样做:britishdeveloper.co.uk/2011/03/…
BritishDeveloper

Answers:


56

这些文章可能很有趣……该系列确实探讨了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

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


2
就像已经对使用该框架的Entity Framework感到满意的人一样,这对POCO来说是一个很棒的介绍。
nathanchere

1
如果您要寻找工作单元,请访问blogs.msdn.com/b/adonet/archive/2009/06/16/…–
Mike


7

我建议您花半个小时左右的时间,在当前的VS中生成稳定的EF1.0模型。这将使您对理解EF 4.0的隐喻和概念有很长的路要走。只需建立一个简单的Customer,Products和Orders数据库即可。我建议您自己做,不要使用Northwind。



3

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



2

这是一个看起来不错的Entity Framework POCO模板演练。您可能还想查看ADO.NET团队博客。如果您想从一开始(EF v1.0)开始学习EF,那么我发现Julia Lerman的《编程实体框架》一书非常完整。


谢谢-我没有看过这本书,但我已经阅读了提供的两个链接。模板演练对解释定义POCO对象后如何将其他功能添加到POCO对象(例如,延迟加载)很有用,但是(而且我可能会在这里遗漏一些明显的东西)它实际上并未解释如何入门(即,简单地创建指定的类既不会使其成为实体,也不会使其与模型相关联)我在博客中也有类似的经历。我会考虑拿这本书-看起来很有希望-谢谢。
基本

2
关于茱莉亚·莱尔曼(Julia Lerman)的书,值得一提的是,她正在编写涉及EF4的第二版:learningentityframework.com/LearnEntityFramework/book/…。我记得我读过某个地方的计划发布日期是今年5月,但现在找不到该来源。我也刚找到这个网站:nudeobjects.net/home/index2.shtml
Slauma 2010年

Slauma,您提供的链接完全符合我的需求-除了它使用的是第三方“ Naked Obects”库,该库似乎以某种方式掩盖了复杂性-有一分钟,我以为您已破解它
基本


1

朱莉娅·莱曼(Julia Lerman)提供了一系列精彩的入门视频,每个视频约10分钟。它们是介绍性的,但是有许多实用技巧可帮助您消除一些潜在的学习障碍。我特别喜欢她通过使用SQL Server Profiler观看实际的SQL演示的演示。


1

如果要使用断开连接的方案,建议您阅读Julie Lerman的书:“ Programming DbContext”,特别是第4章。

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

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



0

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

https://entityinterfacegenerator.codeplex.com


测试存储库/上下文很有趣且方便,但是为什么您需要抽象实体本身呢?根据定义,它们内部不应包含任何功能代码。
基本

你是对的。通常,人们不需要单独的界面。但这确实可以帮助想要解决循环引用并希望与第三方共享接口(而不是实际类)的人们。如果您的公司需要通过与第三方集成的审核,而这不需要共享中的详细实现,这将很有帮助。
Believe2014 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.