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

c# dataset entity-framework wcf

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

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

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

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

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

Xeshu

一般承认的答案

我同意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等) - 哪一个真的无关紧要,即它也是个人偏好和编码风格的问题

专家解答

我不能提倡数据集,特别是在像WCF这样的SOA环境中 - 它可以工作,但主要是出于错误的原因。它们根本不是便携式的,IMO并没有真正“服务”超过服务边界。当然,IMO在大多数其他场景中也不起作用;-p

那么它归结为你想要做多少管道。大多数ORM将为您创建WCF可序列化类型;我个人现在使用LINQ-to-SQL;虽然EF 4.0在3.5sp1中要比EF好得多,但它比EF更简单,更完整。您可以使用自定义TSQL(通过ExecuteQuery ,它仍然将映射返回到对象),但我倾向于使用SPROC(用于复杂查询)或LINQ生成的查询(用于简单请求)。

自己编写类型也很好,并且可以使用NHibernate等。这么多选项。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因