【发布时间】:2008-12-13 03:10:22
【问题描述】:
我开始设计一个新的应用程序,我想知道人们对 Linq2SQL 或 Linq2Entities 的看法,以及他们认为什么是快速开发的更好技术。
我也在对 ADO.net 数据服务进行一些研究。
【问题讨论】:
标签: .net linq linq-to-sql linq-to-entities ado
我开始设计一个新的应用程序,我想知道人们对 Linq2SQL 或 Linq2Entities 的看法,以及他们认为什么是快速开发的更好技术。
我也在对 ADO.net 数据服务进行一些研究。
【问题讨论】:
标签: .net linq linq-to-sql linq-to-entities ado
是的,同意 Slace。
请注意您选择的框架,以确保它满足您的所有需求。
例如,我最近从一个工作项目中删除了 Entity Framework,因为它在过去几周内非常稳定地使用它,因为它不能满足我的需求,主要是因为:-
除此之外,命令和框架看起来简单明了,我选择 EF 的原因是:
进一步阅读(另一个 SO 帖子):
Is LINQ to SQL Dead or Alive?
我很想选择 EF,我真的不知道如何看待 L2S 与 EF 的失败,如果 L2S 真的是一只死鸭,耸耸肩。不可否认,我对 EF 的主要抱怨是 NotSupportedException - 如果我可以在 linq 中执行方法调用而不得到这个,我可以绕过延迟加载......
【讨论】:
如果您满足以下设计要求,我是 LINQ to SQL 的忠实粉丝:
我没有用 Entity Framework 做很多工作,但据我所知和我所做的是,当从与 LINQ to SQL 使用的相同数据库生成时,它没有那么好的性能。
性能较低是由于实体框架的性质,它使用 ADO 而不是您正在使用的数据库服务器的特定提供程序。
【讨论】:
我想说,对于一个简单到适度的数据库模式,Linq2SQL 工作得很好,并且更容易设置和使用。这是我用于我的 ORM 的,通过部分类进行一些小调整以支持验证和授权/审计。我使用 DBML 设计器并添加我的表/关系。我更改了 DataContext 以使其抽象并构建一个具体的实现,它允许我提供表值函数/存储过程(作为方法映射到数据上下文中)的实现,这些实现提供了用于审计和授权的钩子。我在实体类上为 OnValidate 和 OnLoad 实现部分方法,以在表级别进行验证和授权。我发现这几乎就是我所需要的。最近,我一直在为具体的数据上下文定义一个接口和包装器,以便在我的单元测试中模拟它。
【讨论】:
我认为 Linq 2 Sql 是一个很好的选择。几点:
【讨论】:
我的投票投给了 Linq-to-SQL。适合您的快速开发场景;易于上手,易于使用。此外,它还可以从 Linq 表达式生成良好/高效的 SQL 查询。
Linq-to-Entities 很笨拙,如果您尝试使用任何应该将其与 L2S 分开的“高级”功能,那么您将不得不开始使用 XML 编辑器编辑您的 EDMX 模型文件(您的很快就会在设计器中遇到“限制”,Microsoft 推荐的唯一解决方法/解决方案是使用 XML 编辑器手动调整 EDMX)。最重要的是,它往往会生成非常糟糕/低效的 SQL 查询。
Microsoft 表示,Entity Framework 的下一个版本会更好,并将支持 L2S 的所有优点。但是下一个版本不会很快发布,所以在此之前 L2S 是您最好的选择。
【讨论】:
我建议查看适用于 ORM 的非 Microsoft 解决方案。 nHibernate 是一个很好的解决方案,它具有这两个框架的所有优点以及更多优点。是的,它的学习曲线更陡峭,但流畅的 nHibernate 对此有所帮助。值得付出努力。
【讨论】:
没有人可以肯定地说你什么更好。
两种技术都有问题(NHibernate 也有问题)。
我正在使用 Linq-to-SQL 并且非常满意。我认为 Linq-to-SQL 中的问题比 EF 中的要少 ^_^。
【讨论】:
这是一个很老的问题,但投票最多的 LinqToSql 啦啦队让我很担心。 LinqToSql 有很大的缺点。
Do not use the Visual Studio 2008 LinqToSql O/R Designer
The drawbacks of adopting Linq To Sql
也就是说,EntityFramework 也有明显的缺点。
有很多更好的选择(NHibernate 是目前最好的选择)。
【讨论】:
在我们尝试进行更新之前,我们认为 L2S 很棒。然后就很可怜了。我的同事在做大部分工作,而我做其他事情。他谈到了 EF 以及过度可配置性使其使用变得混乱的方式。
我建议,既然我们以 MSSQL 为目标并且这不会改变,他可以破解所有数据库提供程序抽象的东西。一段时间后,他告诉我这是一个很好的建议,而且他的代码更简单,维护起来也不那么繁琐。
我很好奇这个答案被否决的基础。它描述了实际经验,并讨论了另一种策略以及该方法的相对成功。否决投票是针对具有误导性、事实上不正确或只是简单的拖钓的答案。
碰巧我已经改变了我对整个 EF 与 L2S 事情的立场,但这并没有改变这样一个事实,即仅仅因为它表达了与你自己不同的观点而对某件事投反对票是幼稚的,并且完全违背了精神StackOverflow 的。
【讨论】:
如今,Linq to SQL 是一条死胡同,因为 Microsoft 不会再更新它了。我在自己的项目中使用了一段时间,但与真正的 SQL 相比,我发现它的功能不足。当然,在短期内运行起来似乎更容易,但在应用程序的开发周期中,您会发现您更喜欢 SQL 的强大功能。
我认为 LINQ TO SQL 应该只被那些严重依赖框架抽象层并且没有时间/精力/欲望去追求 SQL 的人采用。
您应该记住的另一件事是,SQL 和您的应用程序之间的额外层有其自身的成本。速度差异不是您容易注意到的,但确实存在。
我个人建议刚开始的人应该直接毕业学习 SQL,而不要错过 LINQ to SQL。
【讨论】: