c# - 如何播种外键一对多列表关系?
问题描述
我有班级/桌子:
public class Song
{
[Key]
public Guid Id { get; set; }
[Required]
public string Name { get; set; }
[ForeignKey("FK_SongTags")]
public List<Tag> Tags { get; set; }
}
类/表标签在哪里:
[Table("Tags")]
public class Tag
{
[Key]
public string Name { get; set; }
}
在我的上下文中,我称之为种子:
modelBuilder.Entity<Song>().HasData(new List<Song>
{
new Song { Id = Guid.NewGuid(), Name = "Some random song", Tags = new List<Tag> { "pop", "rock" } }
});
当我执行dotnet ef database update时,我得到:
无法添加实体类型“歌曲”的种子实体,因为它设置了导航“标签”。要为关系播种,请将实体种子添加到“标签”并指定外键值 {“FK_SongTags”}。考虑使用“DbContextOptionsBuilder.EnableSensitiveDataLogging”来查看涉及的属性值。
我该如何解决这个错误?
解决方案
您需要多对多关系,因为一首歌曲可以有多个标签,并且每个标签也可以用于另一首歌曲。尝试这个:
public class Song
{
[Key]
public Guid Id { get; set; }
[Required]
public string Name { get; set; }
public virtual List<Tag> Tags { get; set; }
}
[Table("Tags")]
public class Tag
{
[Key]
public string Name { get; set; }
public virtual List<Song> Songs{ get; set; }
}
进行更改后,您必须对 db 进行初始迁移。
但如果你仍然认为你需要一对多试试这个
[Table("Tags")]
public class Tag
{
[Key]
public string Name { get; set; }
public Guid SongId {get; set;}
public virtual Song Song {get; set;}
}
推荐阅读
- angularjs - 过滤器在 AngularJs 中不起作用
- curl - 在 AIX 面临的问题上从源代码构建 Curl
- python - Python,从区间中删除子区间
- python-3.x - cx_Freeze 转换的 exe:窗口立即关闭
- angular - HashLocationStrategy 和 Location Strategy Import.Angular 2 & Typescript 后未检测到路径
- c# - “底层连接已关闭:发送时发生意外错误。”。邮递员可以使用相同的标题
- r - 如何获取“tidyverse”包之类的冲突信息?
- android - 在本地测试 firebase 函数:如何将 android 应用程序指向本地运行的可调用函数?
- python - 运行简单的 Python Flask Web 应用程序时出错
- html - 如何根据响应式设计对齐 div