繁体   English   中英

为了使用ria服务,是否应该从模型中删除所有继承?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM