我是CSLA和实体框架的新手。我正在创建一个新的CSLA / Silverlight应用程序,它将取代已有12年历史的Win32 C ++系统。旧系统使用自定义DCOM业务对象库并使用ODBC来访问SQL Server。新系统不会立即取代旧系统 - 它们必须在未来几年内与同一数据库共存。
起初我认为EF是最先进和最好的方式。在制作一个小型EF模型并且只有2个CSLA可编辑的根对象(我最终将拥有数百个对象,因为我的数据库有800多个表)时,我正在质疑EF的使用。
在当前的系统中,由于100%控制生成的SQL,我需要多次对查询进行精细的细节性能调优。但是在EF看来,在幕后发生的这么多事情让我失去了控制权。像http://toomanylayers.blogspot.com/2009/01/entity-framework-and-linq-to-sql.html这样的文章无助于我对EF的印象。
由于LINQ to EF,人们似乎喜欢EF,但由于我的标准在客户端和服务器之间作为标准对象传递,因此我似乎可以在没有LINQ的情况下轻松构建查询。我在WCF RIA中理解有查询投影(或类似的东西)我可以做客户端LINQ,它在转换成实际SQL之前会移动到服务器,所以在这种情况下我可以看到EF的好处,但不是在CSLA中
如果我使用原始ADO.NET,我会在5年后后悔自己的决定吗?
最近有没有其他人做过这个选择,你走哪条路?
答案 0 :(得分:7)
在你的情况下,我仍然会选择EF而不是手工完成。
为什么呢? EF - 特别是在.NET 4中 - 已经相当成熟。与您必须手动编码数据访问代码相比,它将使您能够更轻松地完成大部分数据库操作,并且代码更少。
如果您确实需要绝对最大性能,您可以随时插入存储过程以进行插入,更新,删除,然后使用EF4而不是动态创建SQL语句的默认行为。
EF4具有更好的存储过程集成,这确实打开了两全其美的优势:
查看一些资源:
答案 1 :(得分:2)
您似乎有各种要求和各种解决方案。
我通常会将每项要求评为必要条件,非常好,不必要。然后看看有什么用。
我同意@marc_s所说的,你可以充分利用两个世界。
我要说的唯一的另一件事是,如果这个解决方案将在未来5年内出现,您是否考虑过单元测试?
plenty of examples如何使用EF进行设置。 (我个人避免使用ADO.Net只是因为对于单元测试而言,分离问题非常复杂。)
没有简单的解决方案。我会在你的项目中选择一个功能,这将花费你一天左右的时间。尝试不同的方法(原始sql,EF,EF +存储过程),看看哪些有效!
答案 2 :(得分:0)
客观地看一下CSLA - 调用'DataPortal'并检查调用堆栈。
接下来,将这些类放在存储运行时数据的CI构建服务器上,并在一系列运行中提供散点图。
接下来,查看创建的代码。问问自己如何根据依赖静态创建者和受保护/私有构造函数的类来使用依赖注入之类的东西。
接下来,看看'CSLA'课程承担的责任。
最后问问自己,每个环境创建具有不同构造函数的对象是否有意义,并问问自己如何对这些对象进行单元测试。