我应该使用Entity Framework,DataSet还是Custom类?

13 c# wcf entity-framework dataset

我在这里真的很难过.我需要设计一个"桌面应用程序",它将使用WCF作为通信渠道.它是一个多层应用程序(数据库和应用程序服务器是相同的,客户端通过互联网云).

应用程序有点复杂(在SQL和代码逻辑方面)然后是常见的LOB应用程序,但概念是相同的:从DB读取,更新到DB,处理并发等等.我的问题是现在使用Entity Framework开放,我无法决定采用哪种方式:我应该使用实体框架,数据集还是自定义类.

正如我理解为Entity Framework,它将创建我的数据库表ALONG与CRUD脚本的对象映射.这对于简单的CRUD来说一切都很好,但是大多数时候"选择"很复杂,它需要一个自定义SQL.我知道我可以在EF中使用存储过程(我不喜欢SP btw,我不知道为什么,我喜欢手动在DAL中编写我的SQL代码,我感觉更加安全和舒适).

使用DataSet,我将使用自定义SQL并填充数据集.使用自定义类(数据库表的对象),我将在自定义类(集合和列表等)上填充自定义SQL.我想使用EF,但我没有信心部署一个我没有编写但在代码中看不到的SQL的应用程序.我在这里错过了一些东西.

在这方面的任何帮助将不胜感激.

Xeshu

mar*_*c_s 12

我同意Marc G. 100% - DataSets很糟糕,特别是在WCF场景中(它们为处理内存数据操作增加了很多开销) - 不要使用它们.它们对初学者和小规模的双层桌面应用程序都没有好处 - 但我不会在一个严肃的专业应用程序中使用它们.

基本上,您的问题归结为如何将数据库中的行转换为可以在WCF中远程控制的内容.这意味着某种形式的映射 - 要么你自己做,使用DataReaders,然后将所有数据推送到WCF [DataContract]类 - 你当然可以做到这一点,给你最终的控制,但它也是乏味,繁琐和容易出错的.

或者你让一些现成的ORM为你处理这个笨拙的工作 - 选择Linq-to-SQL(优秀,易用,灵活,但仅限SQL Server),EF v4(在2010年3月之前 - 看起来非常有前途,非常灵活)或任何其他ORM,真的 - 最适合您的需求.

ORM领域的其他重要竞争对手可能包括Subsonic 3.0和NHibernate(以及许多其他产品).

总结一下:

  • 忘了数据集
  • 您是否拥有100%的控制权以及您自己的SQL与对象之间的映射
  • 你让一些有能力的ORM处理(Linq-to-SQL,EF v4,Subsonic,NHibernate等) - 哪一个真的无关紧要,即它也是个人偏好和编码风格的问题