泛型类的DataContract定义

时间:2012-01-16 16:04:55

标签: wcf entity-framework dto

我们有一个分层应用程序:

用户界面< - > WCF< - > DAL (使用实体框架)

我们不想公开我们的EntityTypes,因此我们将转换为DAL中的自定义DTO。 DTO类型由UI,WCF和DAL解决方案引用。

提出了几个问题 -

  • 将[DataContract]和[DataMember]属性添加到我们的所有自定义DTO类型和属性中是否有任何负面影响?
  • 这可能导致不希望通过WCF访问数据的应用程序出现任何问题吗?

2 个答案:

答案 0 :(得分:2)

否和否。这些属性是WCF用于创建和实施Web服务合同以及确定通过网络序列化的内容的机制的一部分。

答案 1 :(得分:0)

将属性插入到元数据中并驻留在那里,直到某些用户代码使用反射查询它们。它们没有任何性能影响,唯一的是它们扩大了程序集元数据表。 但它更多的是一个设计问题,你通常不应该陷入这种情况。如果你用一个与平台无关的属性(例如[Serializable])来装饰某个类,那么你会说“好的,这种类型可能会被序列化一天,无论你想用它的方式和位置”。这非常好,但是如果你使用像[DataContract]这样的特定于平台的属性来装饰同一个类,那么你有点告诉全世界“好吧,这是一个WCF DTO并且打算使用在运营合同中“。另外,如果您使用DataContract,那么您可以将类与DataContractSerializer结合使用,那么您还必须明确定义[DataMember]

结论 - 你通常不应该这样。考虑重构您的软件模型。