如何在EntityFramework核心的根模型中不声明键

时间:2018-09-07 10:29:36

标签: c# .net entity-framework entity-framework-core

我想为所有表创建一个具有一些公共字段的基础模型,例如CreatedByModifiedBy,但是我不想将密钥添加到该基础模型中。

public abstract class BaseModel
{
    public string CreatedBy { get; set; }

    public string ModifiedBy { get; set; }
}

public class Student : BaseModel
{
    [Key, Column(Order = 0)]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string FirstName { get; set; }
}

我收到此错误消息

  

派生类型的属性“ Id”不能具有KeyAttribute,因为   主键只能在根类型上声明

我正在使用Entity Framework Core 2。

1 个答案:

答案 0 :(得分:0)

我收到了同样的错误,来到了这里。您的代码不完整,但是我可以根据我的经验提供一些见解。可能的原因:

  1. DbSet<BaseModel>在您的上下文中

  2. 涉及基本模型的外键:

    [ForeignKey(nameof(BaseModel)] public int SomeId {get;组; }

    公共BaseModel SomeNavigationProperty {get;组; }

  3. 在您的任何模型中使用BaseModel的某些(导航)属性(在db上下文中使用)

    public BaseModel SomeModel {get;组; }

所有这些都会使add-migration认为BaseModel是要在数据库上下文中添加和处理的模型,并且会产生此错误。