[英]Should I remove all inheritance from my model in order to work with ria services?
我之前对此发表了一些问题,但有所不同。
因此,请考虑我们模型的一小部分:
Person是具有3个继承自其的类的基类。
这4个在我们的设计中非常重要,并与许多其他实体链接。 我可以通过删除继承来解决ria服务遇到的所有问题,但这确实会增加模型的复杂性。
我遇到的第一个问题是我无法查询客户,雇员或配偶,但是有人给了我一个解决方案,那就是在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)获取基本实体类型“ Person”的实体集。
即使配偶已经在数据库中,并且我先取回它,我也会遇到类似的异常。
另请注意,出于某些原因,在某些地方使用“人”代替“人” ...
那么我该如何解决这个问题,我在做什么错?在使用带有继承的ria服务时,我会一直陷入困境吗?
我在网上找到了一些参考资料,都说它可以正常工作,然后在其中的DomainService代码中他们改变了某些内容,但没有任何细节。
我正在使用VS2010 RC1 + Silveright 4
注意:神奇地在所有MIX会话中工作的数据源窗口对我而言不起作用...它从不显示任何内容
此行为是由于RC1中的错误所致。 有关详细信息,请参见http://forums.silverlight.net/forums/p/169599/384514.aspx#384514 。
RC1没有已知的解决方法,但是您显示的层次结构在RC2中应该可以正常工作。 该错误集中在使用派生类型(EntityRef和EntityCollection)的关联上,因此我怀疑是在您的场景中触发了该错误的是Spouse关联。
关于“人”与“人”-实体集的名称选择来自EF对实体名称的复数。 客户端上的查询名称来自DomainService中的相应查询名称,这意味着您可以根据需要公开一个公共IQueryable GetPeople()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.