linq-to-sql – 从LINQ迁移到SQL到实体框架4.0 – 提示,文档等

前端之家收集整理的这篇文章主要介绍了linq-to-sql – 从LINQ迁移到SQL到实体框架4.0 – 提示,文档等前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在.NET 3.5 SP1中尝试了EF,而且我也是很多沮丧的人之一,决定学习LINQ to sql.现在我知道EF是“选择”的前进道路,加上EF 4.0有一些令人兴奋的新功能,我想将我的应用程序迁移到EF 4.0.

任何人都可以提出专门针对4.0和L2S迁移的优秀资源?注意:我可以在.NET 3.5中找到大量关于从L2S迁移到EF的博客文章,但是我觉得很多这些博客文章对于使用4.0的人来说显然是过时的,没有帮助.

我真的很喜欢像我能得到的那么深入的,底层的东西,我想要真正的离开感觉就像我知道EF 4.0我现在知道L2S 3.5的方式.

TIA!

解决方法

我已经做了这种非常类型的转换和FWIW的负载,我会说有更多的相似之处,而不是差异.我不认为有什么明确的文件会让你感觉像EF4的专家,超出了已经在那里的东西?

http://msdn.microsoft.com/en-us/library/ex6y04yf(VS.100).aspx

我能给你的是更明显的“陷阱”.具体来说,Linq2sql想要将业务层和数据层组合得更加明显.它真的推动你创建自己的部分课程.我可以继续下去,但最具体的原因是一对一的映射器将为所有关系创建公共父和子属性.

如果您尝试对此模型使用任何类型的序列化,则随着序列化程序从父级移动到子级,然后返回到父级,您将会遇到循环引用问题,因为Linq2sql序列化行为会自动包括图中的所有子项.当您尝试抓住客户记录来检查“名称属性自动获取包含在图表中的所有相关订单记录时,这也可能非常烦人.您可以将这些父和子导航属性设置为“public”或“internal”,这意味着如果您想要访问它们,但不希望序列化程序自动创建循环引用,那么您几乎必须在部分访问它们类.

一旦你启动了部分类路径,你通常只是继续该模式,最终将开始添加帮助程序方法来访问您的数据到您的单个实体类.此外,随着Linq2sql DataContext更轻量化,您经常会发现人们在其上下文中使用某种类型的Singleton模式或Repository模式. EF 3.5 / 4你根本看不到这一点.

所以让我们说你有一些类似于所描述的环境,你想开始转换.那么,你需要知道DataContext何时被创建/销毁,有些人会使用using()语句来启动每个Business Layer方法,并且在该方法的整个生命周期中使上下文几乎活着.显然,这意味着你可以进入一些需要在你的问题的最后添加.ToList()或一些其他的扩展方法的毛茸茸的情况,你可以拥有一个完整的内存中的对象集合,传递给一个子方法或任何甚至甚至那么您可能会遇到问题,尝试更新上下文中的实体,而不是最初从中检索.

您还需要了解如何将Linq2sql分类中的大部分BusinessLogic纳入另一个层,如果它不明确地处理数据操作.当你需要/不需要你的上下文时,你会发现这是不会痛苦的,但它是最好的

接下来,您将要处理对象图形状况.由于延迟加载工作方式的差异(他们使得EF 4.0中的配置可以使其更像Linq2sql),您可能需要检查Linq2sql中图形中子对象的隐含使用实现并验证它现在不需要显式的.Include()或.Load()来获取图形中的子对象.

最后,您将需要一般地决定一个序列化解决方案.默认情况下,作为EF模型的一部分生成的DataContracts和DataMember属性可以很好地与WCF一起工作,但对于像旧的.asmx WebServices这样的XmlSerializer,并不是很棒.即使在这种情况下,如果您不需要通过电线序列化子对象,您也可能无法使用它.由于通常情况并非如此,如果您有更多的SOA,那么您将要迁移到WCF,这将增加一大堆机会,但仍然是头痛.

为了处理部分类的情况,以及大量的DataContext甚至序列化问题,还有许多可用于EF 4.0的新的代码生成模板. POCO实体模板有很多人兴奋,因为它创建POCO类,正如你所期望的(麻烦是排除任何类或成员属性的WCF等).此外,自我跟踪实体模型几乎解决了上下文问题,因为您可以传递您的实体,并让他们记住更新的时间和方式,因此您可以更自由地创建/处理上下文(如Linq2sql).另外值得一提的是,这个模板是WCF的开发模板,也可以是像RIA Services或WCF Data Services这样的任何建立在WCF上的模板,所以它们已经有[DataContract],[DataMember]和[KnownType]属性.

这是一个指向POCO模板的链接(不包括在外):
(编辑:我不能发布两个超链接,所以只需访问visualstudio画廊网站并搜索“ADO.NET C#POCO实体生成器”)

请务必阅读ADO.net团队博客上有关实现此信息的链接.如果您属于WebService vs. WCF服务类别,您可能会喜欢将上下文和实体分成单独的项目/程序集. “添加服务引用…”代理生成不会像以前一样使用“添加Web引用…”命名空间,因此您可能希望在客户端应用程序中实际引用您的实体类程序集,以便您可以“排除类型从参考库“或任何您的服务引用,所以你不会得到很多模糊的参考从多个服务使用相同的EF模型和暴露这些实体…

我知道这是漫长而漫长的,但是对于我而言,这些小问题对于我来说并不是记住使用context.EntityCollection.AddObject()而不是context.EntityCollection.InsertOnSubmit()和context.SaveChanges()而不是上下文.的SubmitChanges()…

猜你在找的MsSQL相关文章