【问题标题】:Error: The seed entity for entity type 'JobAccessLevel' cannot be added because there was no value provided for the required property 'PersonId'错误:无法添加实体类型“JobAccessLevel”的种子实体,因为没有为所需属性“PersonId”提供值
【发布时间】:2019-10-10 10:35:43
【问题描述】:

我收到以下错误:

无法添加实体类型“JobAccessLevel”的种子实体,因为没有为所需的属性“PersonId”提供值。

这似乎是由于尝试使用 PersonId = null 为数据库播种造成的。 (但这正是我想要做的)

我该如何解决这个问题?

我的问题的背景:

假设我想根据 PersonId 和 people 的工作来保护某些东西,但我想为特定 Job 提供通用的访问权限,但在给定的工作中为 Person 提供特定的访问级别。

为了控制这一点,我创建了以下要存储在数据库中的实体:

public class JobAccessLevel
{
    public int JobId { get; set; }
    public int? PersonId { get; set; }
    public int AccessLevelId { get; set; }
    public AccessLevel AccessLevel { get; set; }
}

所以当 PersonId 为 null 时,我仍然可以使用访问级别。

在数据库中创建这个实体的配置文件是这样的:

public void Configure(EntityTypeBuilder<JobAccessLevel> builder)
{
    builder.Property(JobAccessLevel=> JobAccessLevel.JobId ).ValueGeneratedNever();
    builder.Property(JobAccessLevel=> JobAccessLevel.PersonId ).ValueGeneratedNever();

    builder.HasKey(JobAccessLevel=> new { JobAccessLevel.JobId , JobAccessLevel.PersonId });


    builder.HasData(new List<JobAccessLevel>
    {
        new JobAccessLevel
        {
            JobId = 1,
            AccessLevel= 2,
            PersonId = null
        },
        new JobAccessLevel
        {
            JobId = 2,
            AccessLevel= 1,
            PersonId = null
        },
        new JobAccessLevel
        {
            JobId = 2,
            AccessLevel= 2,
            PersonId = 3
        }
    });
}

p.s:我在尝试创建新迁移时收到此错误

【问题讨论】:

    标签: c# entity-framework-core


    【解决方案1】:

    这是因为您将键定义为JobIdPersonId 的组合键,这要求两者都有一个值。另见:

    您可能希望实体拥有自己的 id:

    public class JobAccessLevel
    {
        public int Id { get; set; }
        // ...
    }
    

    然后:

    builder.HasKey(a => new { a.Id });
    

    您还必须在种子数据中提供:

    builder.HasData(new List<JobAccessLevel>
    {
        new JobAccessLevel
        {
            Id = 1,
            JobId = 1,
            AccessLevel= 2,
            PersonId = null
        },
        // ...
    

    【讨论】:

      猜你喜欢
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      相关资源
      最近更新 更多