Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在EntityFramework core的根模型中不声明密钥_C#_.net_Entity Framework_Entity Framework Core - Fatal编程技术网

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
    在您的上下文中

  • 涉及基本模型的外键:

    [外键(名称)(基本模型)] 公共int SomeId{get;set;}

    public BaseModel SomeNavigationProperty{get;set;}

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

    public BaseModel SomeModel{get;set;}


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

    只需不映射
    BaseModel
    类,只映射子类。或者根本不使用基类和可见属性。这些属性是完美的候选者所有这一切的主要动机是在BaseModel中添加IsDeleted属性,并使用如下查询筛选器
    modelBuilder.Entity().HasQueryFilter(p=>!p.IsDeleted)
    是否有任何方法实现此功能是的。关于带阴影属性和查询筛选器的软删除,此答案为:@miR您的
    DbContext
    类中存在问题。请共享您的
    DbContext
    类代码。