我应该使用Entity Framework而不是原始的ADO.NET吗?

10

我刚接触CSLA和Entity Framework。我正在创建一个新的CSLA / Silverlight应用程序,以替换一个12年前的Win32 C ++系统。旧系统使用自定义DCOM业务对象库,并使用ODBC连接到SQL Server。新系统将不会立即替换旧系统 - 它们必须在未来几年同时存在于同一数据库中。

起初,我认为EF是最好的选择,因为它是最新的技术。但是当我创建了一个小的EF模型和仅有两个CSLA可编辑的根对象时(最终我将拥有数百个对象,因为我的数据库有800多个表),我严重质疑使用EF的决定。

在当前系统中,我需要经常对查询进行详细的性能调整,这样我就可以控制所有生成的SQL语句。但是,在EF中似乎发生了太多的事情,导致我失去了这种控制。像 http://toomanylayers.blogspot.com/2009/01/entity-framework-and-linq-to-sql.html 这样的文章并没有改变我的看法。

人们似乎喜欢EF是因为LINQ to EF,但由于我的标准是将客户端和服务器之间传递的条件对象,我似乎可以不使用LINQ也能轻松构建查询。我了解到在WCF RIA中有查询投影(或类似的内容),在那种情况下,我可以在客户端使用LINQ并将其转换为实际SQL之前移动到服务器,所以在那种情况下我可以看到EF的好处,但在CSLA中不行。

如果我使用原始的ADO.NET,5年后会后悔吗?

最近有其他人做出了这个选择,他们选择了哪一边?


很好的问题...我也正想问一个非常类似的问题。我一直在想EF相对于ADO.NET的速度和控制方面有什么优势... - Walter
3个回答

7
在您的情况下,我仍然会选择EF而不是全部手动完成。
为什么?EF - 特别是在.NET 4中 - 已经成熟了很多。它将允许您比手动编写数据访问代码更轻松地完成大部分数据库操作,并且需要的代码量更少。
在需要绝对最大性能的情况下,您始终可以插入存储过程以进行插入、更新、删除,EF4将使用这些存储过程而不是默认行为来创建SQL语句。
EF4具有更好的存储过程集成,这确实打开了最佳状态:
- 对于80%的情况,其中性能不是关键问题,使用EF的高生产力 - 对于剩余的20%进行微调和手工制作存储过程,并将其插入到EF4中
请参见一些资源:

2
你似乎有各种要求和各种解决方案的混合。
我通常会将每个需求评级为必要的、好有的、不必要的,然后看看哪个有效。
我同意@marc_s所说的,你可以兼得两者之长。
我想说的另一件事是,如果这个解决方案要持续 5 年,你考虑过单元测试吗?
有很多关于如何使用 EF 设置单元测试的例子(plenty of examples)。 (我个人避免使用 ADO.Net,因为它在单元测试中的分离关注点太复杂了。)
没有简单的解决方案。我建议你选择项目中需要花一天左右时间完成的一个功能。尝试使用不同的方法(原始 SQL、EF、EF+存储过程)并看看哪个更有效!

0

客观地看待CSLA - 调用“DataPortal”并检查调用堆栈。

接下来,将这些类放在一个存储运行时数据并提供一系列运行的散点图的CI构建服务器上。

然后,看看所创建的代码。问问自己如何在依赖于具有受保护/私有构造函数的静态创建者的类的情况下使用诸如依赖注入之类的东西。

接下来,看看“CSLA”类承担了多少责任。

最后问问自己是否有意义为不同的环境创建具有不同构造函数的对象,并问问自己如何对它们进行单元测试。


你似乎因为一些合理的原因和一些不太合理的原因而不喜欢CSLA。你有什么推荐的业务对象框架,它具有以下特点:可用性来自Silverlight和.NET(WebForms、WinForms、WPF、自定义SOA),服务器端和客户端规则(用户可配置和硬编码),每个属性/每个CRUD安全控制可由用户配置,每个属性默认字段值可由用户配置,并且可以在不同的客户环境中进行各种n层部署。我需要所有这些以及更多。我正在构建一个应用程序,而不是一个框架,不想重新发明任何东西。有什么建议吗?谢谢。 - Art Dumas
我不确定你所说的“不喜欢csla”是什么意思。代码就是代码。我认为你最初的问题涉及到csla和EF,但是你对需求的措辞表明你已经适应了csla的术语。 - S. Hebert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接