暴露 DTO 或实体的 WCF 服务
Posted
技术标签:
【中文标题】暴露 DTO 或实体的 WCF 服务【英文标题】:WCF Service exposing DTO or Entity 【发布时间】:2010-10-13 13:43:29 【问题描述】:我已阅读有关此主题的问题和答案,但仍有一些问题没有答案。
如果我创建一个将实体转换为 DTO 的方法,我会遇到一些循环调用方法(可能是由模型中的错误引起的),例如:
Product 类有一个属性 Supplier 指向一个 Supplier 类,该类包含一个 List 属性以及提供的所有产品。所以如果我创建一个 GetProductDTO (产品实体) 方法返回 ProductDTO 类我必须为每个产品调用 GetSupplierDTO(Supplier entity),但最后一个方法必须为列表中的每个产品调用 GetProductDTO提供的产品...
总之,我正在寻找一种模式或最佳实践来创建 EntityModel -> WCF 服务 -> Prism WPF 应用程序。
谢谢
【问题讨论】:
【参考方案1】:一般而言,出于 DTO 目的,您可以简单地选择不序列化任何“父”属性。通常,您会看到带有 no 导航属性的 DTO,除了 严格 关联的数据(例如 order-header => order-detail,但您不会有 order-header => 客户 - 只是客户的密钥;您需要单独获取客户)。使用这种方法,序列化/反序列化任何图形都有一条单向路径,它应该可以正常工作。
【讨论】:
好的,这可以是快速的解决方案......接下来在客户端我必须重新创建图表?所以在每一边我都必须转换 EF->DTO 和 DTO->EF ? 是的。这就是你必须做的。 该死,这不是我等待的答案... :-)以上是关于暴露 DTO 或实体的 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章
如何处理循环引用 - 或 - 在 WCF 服务中返回的第一级子项下的引用暴露实体框架数据模型?
我应该将 DTO 映射到客户端和服务器端的域实体/从域实体映射吗?
WCF/服务层/存储库层:从服务层返回 DTO?并从返回的 DTO 在 Controller 中创建 ViewModel