无法在类型';上定义键;用户';源自';人物';.只有实体继承层次结构中的根类型才能包含键

本文关键字:类型 层次结构 实体 继承 包含键 源自 定义 人物 用户 | 更新日期: 2023-09-27 18:22:02

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

我有一个User类,它继承自People类。People类本身继承自Person类。

[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"的异常,但未在用户代码中处理

附加信息:无法在派生自"People"的类型"User"上定义键。只有实体继承层次结构中的根类型才能包含键。

我已经尝试了在中给出的解决方案http://stack247.wordpress.com/2013/02/28/cannot-define-keys-on-type-deriving-from-only-root-type-in-entity-inheritance-hierarchy-can-contain-keys/

但它没有起作用。

我试过了:

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

无法在类型';上定义键;用户';源自';人物';.只有实体继承层次结构中的根类型才能包含键

根据Gert的建议,我们已经从子类中删除了key属性
这已经解决了问题。