我想为所有表创建一个具有一些公共字段的基础模型,例如CreatedBy
和ModifiedBy
,但是我不想将密钥添加到该基础模型中。
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。
答案 0 :(得分:0)
我收到了同样的错误,来到了这里。您的代码不完整,但是我可以根据我的经验提供一些见解。可能的原因:
DbSet<BaseModel>
在您的上下文中
涉及基本模型的外键:
[ForeignKey(nameof(BaseModel)] public int SomeId {get;组; }
公共BaseModel SomeNavigationProperty {get;组; }
在您的任何模型中使用BaseModel的某些(导航)属性(在db上下文中使用)
public BaseModel SomeModel {get;组; }
所有这些都会使add-migration
认为BaseModel
是要在数据库上下文中添加和处理的模型,并且会产生此错误。