我听说它说实体框架太过分了,或者与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复杂.
如果我错了,请纠正我,但实体框架只有在你需要转换后端对象时才会起作用,例如当你组合来自不同数据源的表,拆分表等时.它会添加实体层所以你可以隐藏所有的管道,只是处理你清理过的实体.如果您像在LINQ to SQL中一样使用它1对1,那么我确信您没有使用的复杂层会降低它的速度.听起来LINQ to SQL是适合您工作的正确工具,直到您有更复杂的数据源需求.
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).
但要小心,如果你使用查询 - 例如 - group by,LinqToEntities可以做一些非常有趣的事情.我从未设法让LinqToEntities将一个组转换为一个实际的SQL组,而是生成一些非常无效的大量代码块.
例如,请查看以下链接:http: //social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/bb72fae4-0709-48f2-8f85-31d0b6a85f68
如果您尝试编写"非平凡"查询,ObjectQuery.ToTraceString()是您最好的朋友,以确保EF不会在您的背后做一些非常愚蠢的事情.