是否可以从由实体类型集合组成的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."
答案 0 :(得分:0)
不可能这是不可能的,因为如果您定义它,则意味着复杂类型具有到合同的导航属性。整个实体框架中不允许这样做。这个错误可能来自于某些推断Contract
已被定义为实体但却被补充类型试图将其映射为其他东西 - 但这只是猜测。
答案 1 :(得分:0)
出于某种原因,您发布的代码段很难为我阅读。但是,我可以告诉你,我已经通过类似的WCF类型发送了。我通常不使用ICollection&lt;&gt;要声明我的列表,我倾向于使用List&lt;&gt;相反,从来没有在客户端接收信息时遇到太多问题。
也许这是关于如何在数据合同上定义类的问题。
答案 2 :(得分:0)
我不认为返回包含集合的复杂类型是个问题。请参阅this post。
在这里,我可以添加一个方法来返回IQueryable,它工作得非常好。请注意,Department包含另一个集合。希望这会有所帮助。