现在,.NET v3.5 SP1已经发布(与VS2008 SP1一起发布),我们现在可以访问.NET实体框架。
我的问题是这个。当试图决定使用实体框架和LINQ to SQL作为ORM时,有什么区别?
按照我的理解,实体框架(当与LINQ to Entities一起使用时)是LINQ to SQL的“大哥”?如果是这样的话,它有什么好处?LINQ to SQL不能单独做什么?
现在,.NET v3.5 SP1已经发布(与VS2008 SP1一起发布),我们现在可以访问.NET实体框架。
我的问题是这个。当试图决定使用实体框架和LINQ to SQL作为ORM时,有什么区别?
按照我的理解,实体框架(当与LINQ to Entities一起使用时)是LINQ to SQL的“大哥”?如果是这样的话,它有什么好处?LINQ to SQL不能单独做什么?
当前回答
两者都不支持唯一的SQL 2008数据类型。与我的观点不同的是,Entity仍然有机会在未来的某个版本中围绕我的地理数据类型构建模型,而Linq to SQL被放弃,永远不会。
不知道nHibernate或OpenAccess有什么问题。。。
其他回答
在@lars发布的文章中,有许多明显的区别,但简短的回答是:
L2S是紧密耦合的-对象属性到数据库的特定字段,或者更正确地将对象映射到特定数据库模式L2S仅适用于SQL Server(据我所知)EF允许将单个类映射到多个表EF将处理M-M关系EF将能够针对任何ADO.NET数据提供程序
最初的前提是L2S用于快速开发,EF用于更多的“企业级”n层应用程序,但这使L2S的销售有点不足。
我认为快速而肮脏的答案是
LINQ to SQL是实现这一目标的快速简便的方法。这意味着如果你正在做一些小的事情,你会更快地完成任务,更快地交付。实体框架是一种全面、无限制的方法。这意味着如果你在做更大的事情,你会提前花更多的时间,发展得更慢,并且有更大的灵活性。
Linq到SQL
它是提供程序,仅支持SQL Server。这是一种将SQL Server数据库表映射到.NET对象的映射技术。这是微软第一次尝试ORM对象关系映射器。
链接到实体
是相同的想法,但在后台使用实体框架,作为ORM-同样来自Microsoft,它支持多个数据库实体框架的主要优点是开发人员可以在任何数据库上工作,无需学习语法即可在不同的数据库上执行任何操作
根据我的个人经验,Ef更好(如果你对SQL一无所知)与EF相比,LINQ的性能稍快,因为LINQ语言是用lambda编写的。
我的印象是,如果Linq2Sql不符合您的需求,那么您的数据库就相当糟糕或者设计得非常糟糕。我有大约10个大大小小的网站都在使用Linq2Sql。我已经多次查看和实体框架,但我找不到在Linq2Sql上使用它的好理由。也就是说,我尝试使用我的数据库作为模型,所以我已经在模型和数据库之间建立了1对1的映射。
在我目前的工作中,我们有一个拥有200多个表的数据库。一个有很多糟糕解决方案的旧数据库,因此我可以看到实体框架优于Linq2Sql的好处,但我还是希望重新设计数据库,因为数据库是应用程序的引擎,如果数据库设计糟糕且速度慢,那么我的应用程序也会很慢。在这样的数据库上使用Entity框架似乎是一种快速修复方法,可以掩盖坏模型,但它永远无法掩盖从这样的数据库中获得的糟糕性能。
我正在为一个使用Linq to SQL的大型项目的客户工作。当项目开始时,这是一个明显的选择,因为当时实体框架缺乏一些主要功能,Linq to SQL的性能要好得多。
现在EF已经进化,Linq to SQL缺少异步支持,这对于高度可扩展的服务非常有用。我们有时每秒有100多个请求,尽管我们已经优化了数据库,但大多数查询仍然需要几毫秒才能完成。由于同步数据库调用,线程被阻塞,无法用于其他请求。
我们正考虑切换到实体框架,仅用于此功能。遗憾的是,微软没有在Linq to SQL中实现异步支持(或者开源,所以社区可以这样做)。
2018年12月补遗:微软正在向.NET Core迁移,而Linq-2-SQL在.NET Core上不受支持,因此您需要迁移到EF,以确保将来可以迁移到EF.Core。
还有一些其他选项需要考虑,例如LLBLGen。它是一个成熟的ORM解决方案,已经存在了很长时间,并且已经被证明比MS数据解决方案(ODBC、ADO、ADO.NET、Linq-2-SQL、EF、EF.core)更具未来性。