多个SVC引用,每个引用暴露相同的实体

时间:2011-07-05 18:03:44

标签: wcf entity-framework-4

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

项目:EntityObjects

  • 这是edmx文件所在的位置

项目:WCFService

  • 引用EntityObjects
  • 是否有数据合同以对实体执行操作
  • 有三个不同的svc文件,名为Partner.svc,Section.svc,Scheme.svc

项目:DataLayer

  • 具有对Partner.svc,section.svc,scheme.svc
  • 的服务引用

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

它不会以这种方式工作。如果要在所有三个服务引用中包含相同的数据协定类型,则必须使用data contract sharing。这意味着在添加服务引用之前,必须在单独的程序集中将数据协定提供给客户端项目。通常,这意味着您将在服务器和客户端之间共享数据协定程序集。在你的情况下,它意味着与整个EF的东西共享EntityObjects - 这是不好的。

有多种解决方案:

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

最后两个选择更多是关于应用程序的体系结构。

答案 1 :(得分:0)

你可以:

构建一个包装对所有3个服务的访问权限的包装器类。然后直接引用DataLayer项目中的相关对象,而不是通过服务引用,并根据包装类中的要求进行转换。