c# - 如何创建具有自引用 EFCore 的模型
问题描述
我创建了一个 wpf 应用程序,并使用 entityFrameworkCore 创建了数据库,但我无法创建具有自引用的模型。我尝试了所有选项
我的模型
public class Tag
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TagID { get; set; }
[Required]
public string Name { get; set; }
[Required]
public int TagLevel { get; set; }
public int? TagMotherID { get; set; }
public virtual Tag TagMother { get; set; }
public virtual ICollection<Tag> ListOfTagsChild { get; set; }
public virtual ICollection<ArchiveTag> ListOfArchive { get; set; }
}
并在 OnModelCreating 方法中
modelBuilder.Entity<Tag>()
.HasOne(entity => entity.TagMother)
.WithMany(entity => entity.ListOfTagsChild)
.HasForeignKey(entity => entity.TagMotherID);
一个标签可以有一个或零个父级,但他可以有多个子级
有了这个我有这个错误
SqlException:MERGE 语句与 FOREIGN KEY SAME TABLE 约束“FK_Tags_Tags_TagMotherID”冲突。冲突发生在数据库“EFCoreTest”、表“dbo.Tags”、列“TagID”中。
解决方案
请尝试将 OnModelCreating 更改为
.HasForeignKey(entity => entity.TagMotherID);
推荐阅读
- python - 我可以在旧版本的 tensorflow 上安装时尚 mnist 吗?
- mysql - 想从表 mysql laravel 中获取准确的记录
- r - 如何获得 R 中解释的主成分百分比方差?prcomp() 和 preProcess() 比较
- javascript - 如何将 React 和 material-ui 与烧瓶后端一起使用?
- regex - Hive 从字符串中提取数值
- jquery - 2位或3位电话号码区号的多个掩码,其余为7位
- google-sheets - 谷歌查询公式从下拉列表中包含“全部”
- javascript - 检测是否通过左键或右键单击选择选项
- youtube-api - 有没有办法通过 YouTube API 搜索任何视频中使用的音乐?
- sql - “块中的无效页面”数据库的 Postgresql pg_dump 无法正常工作