我之前已经发布了一些问题,但它有所不同。
因此,请考虑我们模型的一小部分:
Person是基类,它有3个继承自它的类。
这4个在我们的设计中非常重要,并且链接到许多其他实体。 通过删除,我可以通过ria-services解决我遇到的所有问题 继承但这确实会增加模型的复杂性。
我遇到的第一个问题是我无法查询客户,员工或配偶,但是有人给了我一个解决方案,即向DomainService添加类似的内容:
public IQueryable<Employee> GetEmployees()
{
return this.ObjectContext.People.OfType<Employee>();
}
public IQueryable<Customer> GetCustomers()
{
return this.ObjectContext.People.OfType<Customer>();
}
public IQueryable<Spouse> GetSpouses()
{
return this.ObjectContext.People.OfType<Spouse>();
}
接下来我尝试了一些对我来说很正常的事情:
var employee = new Employee()
{
//.... left out to reduce the length of this question
};
var spouse = new Spouse()
{
//.... left out to reduce the length of this questions
};
employee.Spouse = spouse;
context.People.Add(spouse);
context.People.Add(employee);
context.SubmitChanges();
然后我得到以下异常:
无法检索实体集 派生实体类型'配偶'。使用 EntityContainer.GetEntitySet(Type)to 获取为基础实体设置的实体 输入'人'。
即使配偶已经在数据库中, 我首先得到了类似的例外。
另请注意,由于某些原因,在某些地方使用“人物”而不是“人物”......
那么如何解决这个问题,我做错了什么 当使用带继承的ria服务时,我会不断碰壁?
我在网上找到了一些引用,都说它有效,然后是一些DomainService 他们改变了一些但没有细节的代码...
我正在使用VS2010 RC1 + Silveright 4
注意:在所有MIX会话中神奇地工作的数据源窗口对我不起作用......它从不显示任何内容
答案 0 :(得分:2)
此行为是由于RC1中的错误造成的。我们在http://forums.silverlight.net/forums/p/169599/384514.aspx#384514详细讨论了它。
RC1没有已知的解决方法,但您显示的层次结构在RC2中应该可以正常工作。该错误集中在使用派生类型(EntityRef和EntityCollection)的关联,因此我怀疑配偶关联是什么触发了您的场景中的错误。
关于“人”v。“人物” - 实体集的名称选择来自EF的实体名称复数。客户端上的查询名称来自DomainService中的相应查询名称,这意味着如果需要,您可以公开一个公共的IQueryable GetPeople()。