【问题标题】:Is it possible to use entities as data contracts?是否可以将实体用作数据合约?
【发布时间】:2011-07-29 05:15:12
【问题描述】:

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

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

【问题讨论】:

    标签: wcf entity-framework-4.1 datacontract


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢 Ladislav Mrnka。非常感谢您的回答。是否有示例/教程可以告诉我如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2022-01-27
    • 2021-11-21
    • 1970-01-01
    • 2013-11-13
    相关资源
    最近更新 更多