C# 无法在类型';用户';源自';人';。只有实体继承层次结构中的根类型才能包含键
我正在使用Web API 2.2项目和OData4包+实体框架6 我有一个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;
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的团队已经接受了他们的错误,并删除了子类中的键属性。