如何从WCF数据服务返回复杂类型?

时间:2011-04-12 19:16:57

标签: c# .net wcf wcf-data-services entity-framework-4.1

是否可以从由实体类型集合组成的WCF数据服务返回复杂类型?

例如:

 //the complex type to return
 class Entities
 {
    ICollection<Contract> Contracts;
    ...

 }

 //configuration
 public partial class MyContext: DbContext
 {
    public MyContext()
        : base("name=DBEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.ComplexType<Entities>();
        modelBuilder.Entity<Contract>().HasKey(c=>c.Id);
        ...
    }
    ...
  }

 //the WCF Data Service
 public class PricingDataService : DataService<ObjectContext>, IDisposable
 {
     [WebGet]
     public Entities GetEntities()
     {
         return new Entities();
     }
  }

当我尝试上述配置时,我得到一个例外:

" The exception message is 'One or more validation errors 
were detected during model     generation: System.Data.Edm.EdmEntityType: Name: 
Each type name in a schema must be unique. Type name 'Contract' was already 
defined."

3 个答案:

答案 0 :(得分:0)

不可能这是不可能的,因为如果您定义它,则意味着复杂类型具有到合同的导航属性。整个实体框架中不允许这样做。这个错误可能来自于某些推断Contract已被定义为实体但却被补充类型试图将其映射为其他东西 - 但这只是猜测。

答案 1 :(得分:0)

出于某种原因,您发布的代码段很难为我阅读。但是,我可以告诉你,我已经通过类似的WCF类型发送了。我通常不使用ICollection&lt;&gt;要声明我的列表,我倾向于使用List&lt;&gt;相反,从来没有在客户端接收信息时遇到太多问题。

也许这是关于如何在数据合同上定义类的问题。

答案 2 :(得分:0)

我不认为返回包含集合的复杂类型是个问题。请参阅this post

在这里,我可以添加一个方法来返回IQueryable,它工作得非常好。请注意,Department包含另一个集合。希望这会有所帮助。