【发布时间】:2020-11-28 01:58:01
【问题描述】:
我正在使用 Entity Framework 和代码优先的方法编写一个 ASP.NET Core API。我正在使用 2 个具有一对多关系的模型类。为模型生成迁移非常顺利,但是一旦为模型播种,就会出现错误。
public class Level
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int Number { get; set; }
public List<LevelTask> LevelTasks { get; set; }
}
public class LevelTask
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Text { get; set; }
public int Number { get; set; }
public Level Level { get; set; }
}
数据库上下文:
public class VoutlosContext : DbContext
{
public VoutlosContext(DbContextOptions<VoutlosContext> options)
: base(options)
{
}
// Database tables
public DbSet<Level> Levels { get; set; }
public DbSet<LevelTask> LevelTasks { get; set; }
// Setup testing data
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Level>()
.HasMany<LevelTask>(l => l.LevelTasks)
.WithOne(lt => lt.Level);
var levels = Builder<Level>.CreateListOfSize(50).All()
.With(l => l.Number = 1)
.With(l => l.LevelTasks = Builder<LevelTask>.CreateListOfSize(10).All()
.With(lt => lt.Number = 1)
.With(lt => lt.Text = Faker.Lorem.Sentence())
.Build().ToList())
.Build();
modelBuilder.Entity<Level>().HasData(levels.ToArray());
}
}
错误信息:
无法添加键值为“Id:1”的实体类型“Level”的种子实体,因为它设置了导航“LevelTasks”。要为关系播种,您需要将相关实体种子添加到“LevelTask”并指定外键值 {'LevelId'}。
我知道缺少外键,但在阅读了大量文档和论坛并尝试了所有不同的答案后仍然没有结果。
你们知道我做错了什么吗?
【问题讨论】:
-
不确定,但您可能想看看这个answer。
标签: c# .net-core entity-framework-core