当前位置:  开发笔记 > 编程语言 > 正文

.net实体框架如何与LinqToSql相比过度杀伤?

如何解决《.net实体框架如何与LinqToSql相比过度杀伤?》经验,为你挑选了3个好方法。

我听说它说实体框架太过分了,或者与LinqToSql相比,它很难学习.

我想知道以什么方式?我使用LinqToSql并喜欢它.所以,我正在尝试EF,对于我正在做的事情,他们看起来几乎完全相同.命名空间和方法名称是不同的,但到目前为止,我没有看到任何使得EF比LinqToSql更难的东西.

我敢肯定,如果我开始做更复杂的事情,它会变得更复杂.但是我再也不能用LinqToSql做同样的事情,所以我认为这是EF的一个加号,以防万一我想要做一些更复杂的事情.

EF是否比LinqToSql使用更多的资源,以至于如果我只需要类似LinqToSql的功能,我就不应该使用它?

更新:我做了一些测试,我的测试似乎指向Linq to Entities表现优于Linq to SQL.

我首先从一个表中删除1000条记录,添加1000条记录,编辑1000条记录,然后将它们数据绑定到DataView.LinqToSQL:5秒LinqToEntities:2秒

我使用两个连接表执行相同的测试,结果相似.

我的测试似乎支持另一篇文章: Linq To Sql vs Entity Framework Performance

更新2:

谢谢你的回复.在我看来,Linq to Entities与Linq对SQL并不是真的有点过分.在研究了更多之后,我认为与Linq一起实现实体是可行的方法.它似乎有更好的表现.

我相信我所听到的"矫枉过正"声明是因为Linq to Entities可以做的远不止Linq To SQL,它确实需要更多配置(在web.config中大约多一行).Linq to Entities也有一些小事情,从Linq到SQL可能会让人觉得Linq to Entities更复杂.但是一旦你学会了如何做事,看起来Linq to Entities并不比Linq to SQL复杂.



1> gfrizzle..:

如果我错了,请纠正我,但实体框架只有在你需要转换后端对象时才会起作用,例如当你组合来自不同数据源的表,拆分表等时.它会添加实体层所以你可以隐藏所有的管道,只是处理你清理过的实体.如果您像在LINQ to SQL中一样使用它1对1,那么我确信您没有使用的复杂层会降低它的速度.听起来LINQ to SQL是适合您工作的正确工具,直到您有更复杂的数据源需求.



2> U62..:

Linq to SQL和Entity Framework在概念上是不同的野兽,你应该根据它们的需求而不是微基准来做出选择.即使实体框架速度较慢,它也是微软ADO.NET团队关注的焦点,并且将会多次改进.Linq-to-SQL被有效冻结.

从概念上讲,它们的不同之处在于Linq-to-SQL只是使用Linq执行数据库查询的一种方式.听起来很明显,但重点是:您正在访问数据,根据数据库模型进行结构化.虽然FK被适当地转换,但您仍然有多余的对象,其中数据被标准化为不同的表.你写的每个查询都必须处理这类事情.

实体框架允许您以声明方式构造一个表示数据的层,它应该在内存中表示,将来自多个表的数据放入一个适当的对象中; 代表多对多关系作为集合属性等等.然后你编写的查询将是这个模型,并且会更清晰,更明显的目的(不再有15个表连接!).

如果您不确定使用实体框架,O'Reilly有一本全面的书出现于2009年1月15日的Entity Framework(现在可以在Roughcuts上预览) - 它的MSDN文档确实非常糟糕,这使得提出它更加困难.我相信从长远来看,除了最微不足道的项目之外,我都相信它是值得使用的(如果我正在编写一些微不足道的东西,我会直接使用ADO.NET2而忘记Linq).



3> wasatz..:

但要小心,如果你使用查询 - 例如 - group by,LinqToEntities可以做一些非常有趣的事情.我从未设法让LinqToEntities将一个组转换为一个实际的SQL组,而是生成一些非常无效的大量代码块.

例如,请查看以下链接:http: //social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/bb72fae4-0709-48f2-8f85-31d0b6a85f68

如果您尝试编写"非平凡"查询,ObjectQuery.ToTraceString()是您最好的朋友,以确保EF不会在您的背后做一些非常愚蠢的事情.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有