我一直在使用EntityFramework查看很多WCF示例,其中大多数似乎都将某种POCO或DTO类返回给客户端。
我想知道为什么这是因为默认EntityObject
包含[DataContract]
属性并实现了INotifyPropertyChanged
。返回DTO或POCO类比EntityObject
更好(反之亦然)?是否有特定的情况,最好使用一个返回值而不是另一个?
答案 0 :(得分:8)
作为一种最佳实践,您绝对应该让它返回一个明确设计为数据协定并且没有持久性逻辑的DTO / POCO类。
原因是,如果您传递一个EntityObject,那么您假设该服务的使用者将具有对相同数据上下文的引用,这违反了明确边界的SOA原则。它降低了服务的可重用性。
微软很可能在EntityObject上实现了DataContract,以支持他们的一些基于WCF的数据库访问工具,如RIA。 INotifyPropertyChanged用于WPF绑定支持,与WCF或数据协定无关。
答案 1 :(得分:0)
在某些您不了解持久性逻辑的情况下,返回POCO是值得的。我的意思是相同的POCO可以插入其他ORM或用于其他目的。好吧这是POCO优于ORM的优点,但它也提供了比EntityObject更好的性能,它确实增加了代理/通知运行时间。
返回POCO - 您必须在从WCF收到实体时手动更新实体状态。
返回EntityObject - 您收到具有维护状态的实体。