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