【发布时间】:2021-06-30 02:19:36
【问题描述】:
我在这方面找到了几篇 SO 帖子,但无法确定我在这里做错了什么。
我正在尝试为两张表分别设置一个项目。第二项包含对第一项的查找。我可以毫无问题地为父母播种,但无法弄清楚为孩子播种的正确语法。
这是我用来播种父母的代码
modelBuilder.Entity<Group>().HasData(new Group
{
Id = 1,
Name = "Any",
IsDeleted = false
});
这是给孩子播种的代码 - 这失败了:
modelBuilder.Entity<ShiftTypeDb>().HasData(new
{
Id = 1,
Name = "Any",
GroupId = 1,
IsDeleted = false
});
根据docs 的建议,我使用了匿名对象而不是类本身。我也尝试过同时使用导航属性以及外键和导航属性。 id=1 的 Group 肯定已经在数据库中,所以这不是父项不存在的问题。
我得到的错误信息是:
在表“shifttypes”上插入或更新违反了外键约束“fk_shifttypes_groups_groupid”
而为种子生成的SQL是
INSERT INTO shifttypes (id, groupid, isdeleted, name)
VALUES (1, 0, FALSE, 'Any');
尽管它在种子中被硬编码为“1”,但它显然插入了一个“0”作为 GroupId;我无法弄清楚为什么会这样。下面是代表这两个表的两个实体的代码:
public class Group
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsDeleted { get; set; }
public ICollection<ApplicationUser> Users { get; set; }
public Group()
{
}
public Group(string name)
{
Name = name;
}
}
public class ShiftTypeDb
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsDeleted { get; set; }
public int GroupId { get; set; }
public Group Group { get; set; }
public ShiftTypeDb()
{
}
}
【问题讨论】: