是否可以使用实体作为数据契约?

发布于 2024-11-26 19:28:12 字数 111 浏览 1 评论 0原文

是否可以使用实体类的对象作为 WCF 服务上的数据契约?所以我可以将它们发送到客户端。这是好的设计方法吗?

我希望我的实体类也可以用作 DTO,这样我就可以将从数据库检索到的数据发送到客户端。

Is it possible to use objects of Entity classes as Data Contract on WCF service ? So I can send them on the client side. is this good design approach ?

I want to my entity classes to be used as DTOs too, so I can send the data retrieved from database to the client.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一杯敬自由 2024-12-03 19:28:12

是的。如果您使用基于 EntityObject 的实体,默认代码生成器和 T4 模板都应使用 DataContractDataMember 属性来标记它们。如果您使用 POCO,则必须修改模板来为您生成这些属性,或者手动创建 POCO。

您需要使用这些属性的原因是循环引用问题。默认情况下,EF 在关系两侧创建导航属性。在序列化期间,框架需要一些提示来了解该循环引用,否则它将进入无限循环。为了避免实体必须用 [DataContract(IsReference=true)] 标记,并且一旦使用 DataContract 属性,您必须使用 DataMember 来标记每个序列化的属性。

关闭延迟加载也很重要,因为否则序列化将触发每个导航属性的延迟加载,并且它将在所有延迟加载的实体上递归地执行此操作。因此,您可以从服务中返回其所有关系、它们的所有关系等,而不是单个对象。

Yes it is. If you use EntityObject based entities both default code generator and T4 template should mark them with DataContract and DataMember attributes. If you use POCOs you will have to either modify template to generate these attributes for you or create POCOs manually.

The reason why you need to use those attributes is problem with circular reference. By default EF creates navigation properties on both sides of relation. During serialization, framework needs some hint to know about that circular reference otherwise it will go to infinite loop. To avoid that the entity must be marked with [DataContract(IsReference=true)] and once you use DataContract attribute you must use DataMember to mark each serialized property.

It is also important to turn off lazy loading because otherwise serialization will trigger lazy loading on every navigation property and it will do this recursively on all lazily loaded entities. So instead of single object you can return from your service all its relations, all their relations, etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文