Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为了使用ria服务,我应该从模型中删除所有继承吗?_C#_.net_Silverlight_Entity Framework_Wcf Ria Services - Fatal编程技术网

C# 为了使用ria服务,我应该从模型中删除所有继承吗?

C# 为了使用ria服务,我应该从模型中删除所有继承吗?,c#,.net,silverlight,entity-framework,wcf-ria-services,C#,.net,Silverlight,Entity Framework,Wcf Ria Services,我以前在这上面贴过一些问题,但它是不同的 请考虑我们模型的一小部分: 人 顾客 雇员 配偶 Person是基类,它有3个继承自它的类 这4个在我们的设计中非常重要,并与许多其他实体相联系。 我可以通过删除ria服务来解决我遇到的所有问题 但这确实会增加模型的复杂性 我遇到的第一个问题是,我无法查询客户、员工或配偶,但有人给了我一个解决方案,就是在DomainService中添加如下内容: public IQueryable<Employee> GetEmployees

我以前在这上面贴过一些问题,但它是不同的

请考虑我们模型的一小部分:

    • 顾客
    • 雇员
    • 配偶
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>();            
    }
然后我得到以下异常:

无法检索该文件的实体集 派生实体类型“配偶”。使用 EntityContainer.GetEntitySet(类型)为 获取基本实体的实体集 键入“Person”

即使配偶已经在数据库中, 我首先检索它,我得到了类似的异常

还请注意,由于某些原因,在某些地方使用“person”代替“People”

那么我如何解决这个问题,我做错了什么 当使用ria服务和继承时,我会继续遇到障碍吗

我在网上找到了一些参考资料,都说它有效,然后是一些域名服务 他们在其中意外更改了某些内容但没有详细信息的代码

我使用的是VS2010 RC1+Silverlight 4


注意:在所有混合会话中神奇地工作的数据源窗口对我不起作用。。。它从不显示任何内容

此行为是由于RC1中的错误造成的。有关详细信息,请参阅

RC1没有已知的解决方法,但您显示的层次结构在RC2中应该可以正常工作。错误集中在使用派生类型(EntityRef和EntityCollection)的关联上,因此我怀疑配偶关联是在您的场景中触发错误的原因

关于“人”v。“人”——实体集的名称选择来自EF对实体名称的复数化。客户端上的查询名称来自DomainService中相应的查询名称,这意味着您可以根据需要公开公共IQueryable GetPeople()

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();