wcf - 多个 SVC 引用每个都暴露相同的实体

标签 wcf entity-framework-4

我有一个 WPF 应用程序,它使用 WCF 服务对使用 EF4 的实体执行操作。
我的项目结构如下:

项目:实体对象

  • 这是 edmx 文件所在的位置

  • 项目:WCFService
  • 引用实体对象
  • 具有对实体执行操作的数据契约(Contract)
  • 拥有三个不同的 svc 文件,分别称为 Partner.svc、Section.svc、Scheme.svc

  • 项目:数据层
  • 具有对 Partner.svc、section.svc、scheme.svc 的服务引用

  • 问题是 DataLayer 项目随后对对象的引用不明确,因为每个 svc 文件都返回其自己的实体对象引用。

    我该如何解决这个问题?

    最佳答案

    它不会以这种方式工作。如果您希望在所有三个服务引用之间具有相同的数据协定类型,您必须使用 data contract sharing .这意味着在添加服务引用之前,您的数据契约必须以单独的程序集提供给客户端项目。大多数情况下,这意味着您将在服务器和客户端之间共享数据契约程序集。在您的情况下,这意味着与整个 EF 内容共享 EntityObjects - 这很糟糕。

    有多种解决方案:

  • 将实体和 EDMX 内容放入单独的项目中并仅与实体共享项目
  • 使用自定义数据传输对象而不是实体作为数据契约并与这些 DTO 共享程序集
  • 不要共享程序集,而是为客户端手动创建数据契约的“副本”
  • 不要通过不同的服务暴露相同的实体
  • 如果在您的架构中有意义,则仅使用单一服务

  • 最后两个选择更多地与您的应用程序的架构有关。

    关于wcf - 多个 SVC 引用每个都暴露相同的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6586895/

    相关文章:

    c# - Entity Framework 包含()不工作

    c# - WCF webservice - 使用锁会导致问题吗?

    wcf - 通过带有私有(private)字段的 wcf 服务发送对象的问题

    .net - WCF 和 ASP.NET 与 https 的兼容模式

    c# - 有哪些协议(protocol)可以与 WCF 一起使用?

    c# - 从 .Net 更新 iSeries DATE/TIME/TIMESTAMP 列

    c# - 自托管 WCF 服务是否受到任何限制?

    c# - 需要帮助找出返回类型

    entity-framework-4 - Entity Framework 中的代码优先实现

    c# - 使用 ValueInjecter 将 EntityFramework POCO 复制到 DTO 而不触发延迟加载列表和属性