C# 如何在EntityFramework core的根模型中不声明密钥
我想为所有表创建一个带有一些公共字段的基础模型,如C# 如何在EntityFramework core的根模型中不声明密钥,c#,.net,entity-framework,entity-framework-core,C#,.net,Entity Framework,Entity Framework Core,我想为所有表创建一个带有一些公共字段的基础模型,如CreatedBy和ModifiedBy,但我不想将键添加到该基础模型中 public abstract class BaseModel { public string CreatedBy { get; set; } public string ModifiedBy { get; set; } } public class Student : BaseModel { [Key, Column(Order = 0)]
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。我收到了相同的错误并来到这里。您的代码不完整,但我可以根据我的经验提供一些见解。可能的原因:
DbSet
在您的上下文中所有这些都将使
add migration
认为BaseModel
是要在数据库上下文中添加和处理的模型,并将生成此错误。只需不映射BaseModel
类,只映射子类。或者根本不使用基类和可见属性。这些属性是完美的候选者所有这一切的主要动机是在BaseModel中添加IsDeleted属性,并使用如下查询筛选器modelBuilder.Entity().HasQueryFilter(p=>!p.IsDeleted)
是否有任何方法实现此功能是的。关于带阴影属性和查询筛选器的软删除,此答案为:@miR您的DbContext
类中存在问题。请共享您的DbContext
类代码。