Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq to sql 从LINQ迁移到SQL到实体框架4.0-提示、文档等_Linq To Sql_Entity Framework_.net 4.0_Entity Framework 4 - Fatal编程技术网

Linq to sql 从LINQ迁移到SQL到实体框架4.0-提示、文档等

Linq to sql 从LINQ迁移到SQL到实体框架4.0-提示、文档等,linq-to-sql,entity-framework,.net-4.0,entity-framework-4,Linq To Sql,Entity Framework,.net 4.0,Entity Framework 4,我在.NET3.5SP1中试用了EF,我是许多感到沮丧并决定学习LINQtoSQL的人之一。现在我知道EF是“选择的”前进道路,加上EF4.0有一些令人兴奋的新功能,我想把我的应用迁移到EF4.0 有谁能推荐专门针对4.0和L2S迁移的好资源吗?注意:我可以在.NET3.5上找到很多关于从L2S迁移到EF的博客和文章,但我觉得其中许多显然是过时的,对使用4.0的人没有帮助 我真的想要尽可能多的深,引擎盖下的东西,我可以得到;我真的想在离开的时候感觉到我知道EF4.0,就像我现在知道L2S3.5一

我在.NET3.5SP1中试用了EF,我是许多感到沮丧并决定学习LINQtoSQL的人之一。现在我知道EF是“选择的”前进道路,加上EF4.0有一些令人兴奋的新功能,我想把我的应用迁移到EF4.0

有谁能推荐专门针对4.0和L2S迁移的好资源吗?注意:我可以在.NET3.5上找到很多关于从L2S迁移到EF的博客和文章,但我觉得其中许多显然是过时的,对使用4.0的人没有帮助

我真的想要尽可能多的深,引擎盖下的东西,我可以得到;我真的想在离开的时候感觉到我知道EF4.0,就像我现在知道L2S3.5一样


蒂亚

我已经做了大量这种类型的转换和FWIW,我想说的是它们的相似之处多于不同之处。我不认为有任何明确的文档会让你觉得自己是EF4的专家,除了已经存在的东西

我能给你的是更明显的“gotchas”。具体来说,Linq2Sql想要更明显地结合业务层和数据层。它确实促使您创建自己的分部类。我可以继续讲下去,但最具体的原因是一对一映射器将为所有关系创建公共父属性和子属性的方式

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

一旦开始部分类路径,通常只需继续该模式,最终将开始添加帮助器方法,用于将数据访问到各个实体类中。此外,由于Linq2Sql DataContext更加轻量级,您经常会发现人们使用某种单例模式或存储库模式作为上下文。在EF 3.5/4中,您根本看不到这一点

假设您有一个类似于上述环境的环境,并且希望开始转换。嗯,您需要知道何时创建/销毁DataContext……有些人会用一个using()语句启动每个业务层方法,并让该上下文在方法的生命周期内一直存在。显然,这意味着您可能会遇到需要添加.ToList()的棘手情况或者其他一些扩展方法,您可以将对象的完整内存集合传递给子方法或其他任何方法,即使这样,您也可能在尝试更新最初未从中检索到的上下文中的实体时遇到问题

如果Linq2Sql部分类不显式地处理数据操作,那么您还需要弄清楚如何将Linq2Sql部分类中包含的业务逻辑中的大部分放在另一个层中。当你知道什么时候你需要/不需要你的背景时,这不是无痛的,但这是最好的

接下来,您将需要处理对象图的情况。由于延迟加载工作方式的不同(他们在EF 4.0中对此进行了配置,使其行为更像需要它的人使用的Linq2Sql),您可能需要从Linq2Sql实现中检查图中子对象的任何隐含用法,并验证它现在不需要显式的.Include()或.Load()获取图形中的子对象

最后,通常需要决定序列化解决方案。默认情况下,作为EF模型一部分生成的DataContracts和DataMember属性在WCF中工作得很好,但在用于旧的.asmx WebServices之类的东西的XmlSerializer中却没有任何作用。即使在这种情况下,如果您永远不需要通过连接序列化子对象,您也可以不受影响。由于通常情况并非如此,如果您有更多的SOA,您将希望转向WCF,这将增加一系列全新的机会,但也会带来一些麻烦

为了处理部分类的情况,以及大量的DataContext甚至序列化问题,EF4.0提供了许多新的代码生成模板。POCO实体模板在创建POCO类时让很多人兴奋不已,正如您所期望的那样(问题是它排除了WCF等的任何类或成员属性)。此外,自跟踪实体模型几乎解决了上下文问题,因为您可以传递实体并让它们记住更新的时间和方式,因此您可以更自由地创建/处理上下文(如Linq2Sql)。另一个好处是,该模板是WCF或任何构建在WCF上的模板,如RIA服务或WCF数据服务,因此它们已经具备了[DataContract]、[DataMember]和[KnownType]属性

以下是指向POCO模板的链接(不包括开箱即用): (编辑:我无法发布两个超链接,因此只需访问visualstudio gallery网站并搜索“ADO.NET C#POCO实体生成器”)

请务必阅读ADO.net团队博客上关于实现此功能的链接。如果您属于WebService vs.WCF服务类别,您可能会喜欢将上下文和实体拆分为单独的项目/程序集。“添加服务”