Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 无法在类型';用户';源自';人';。只有实体继承层次结构中的根类型才能包含键_C#_Entity Framework_Odata_Entity Framework 6_Asp.net Web Api2 - Fatal编程技术网

C# 无法在类型';用户';源自';人';。只有实体继承层次结构中的根类型才能包含键

C# 无法在类型';用户';源自';人';。只有实体继承层次结构中的根类型才能包含键,c#,entity-framework,odata,entity-framework-6,asp.net-web-api2,C#,Entity Framework,Odata,Entity Framework 6,Asp.net Web Api2,我正在使用Web API 2.2项目和OData4包+实体框架6 我有一个User类,它继承自People类人类本身继承自人类 [Table("People")] public class People : Person { } public class User: People { [Key] public int UserId { get; set; } [ForeignKey("Anonymous")] public int AnonymousId { get;

我正在使用Web API 2.2项目和OData4包+实体框架6

我有一个
User
类,它继承自
People
类<代码>人类本身继承自

[Table("People")]
public class People : Person
{ }

public class User: People
{
   [Key]
   public int UserId { get; set; }
   [ForeignKey("Anonymous")]
   public int AnonymousId { get; set; }
}
当我执行代码时,在这一行的
WebApiConfig::Register
方法中抛出一个异常

config.MapODataServiceRoute(
        routeName: "ODataRoute",
        routePrefix: null,
        model: builder.GetEdmModel());
错误:

System.Web.OData.dll中发生“System.InvalidOperationException”类型的异常,但未在用户代码中处理

其他信息:无法定义从“人员”派生的“用户”类型上的键。只有实体继承层次结构中的根类型才能包含键

我已经试过了当时给出的解决方案

但它没有起作用

我试过:

builder.EntityType<User>().DerivesFrom<People>();
builder.EntityType<People>().DerivesFrom<Element>();
builder.EntityType().DeriveFrom();
builder.EntityType().DerivesFrom();

按照Gert的建议,我们已经从子类中删除了key属性。

这就解决了问题。

只有
个人
可以拥有
[Key]
属性。旁注:像
People
这样的类有意义吗。请注意,该类的一个对象表示一个人。通常,具有复数名称的类表示设计缺陷。我有一个通过实体框架公开的遗留数据库。该模型具有这些关系。是否有一种方法可以使我不必编辑我的模型,也不会引发异常。那么,从除继承树根以外的所有类中删除
UserId
Person
Element
?)。感谢@GertArnold提供的帮助。负责ORM的团队已经接受了他们的错误,并删除了子类中的键属性。