【发布时间】: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:我在尝试创建新迁移时收到此错误
【问题讨论】: