我在codefirst中建立了这种关系,但它显示了此图像中显示的错误。我为您上传了我的模型,您可以从here [4kb]下载它。这个错误是什么?为什么会这样呢?我希望在posts表中包含所有类别。那是什么方式?谁可以帮忙?
有人告诉我出了什么问题?
答案 0 :(得分:0)
按照惯例在实体框架中,删除实体将删除链接到该实体的任何内容。在你的情况下,这意味着删除cat1将删除引用cat 1的每个cat2,cat3和post。
出现问题的原因是您在帖子地图上指定了WillCascadeOnDelete(true),您还希望帖子自动触发删除cat1,cat2和cat3,帖子引用该帖子会导致部分或完全擦除数据库(帖子删除删除删除类别的帖子等的类别)。
要解决此问题,您需要从postMap中删除WillCascadeOnDelete(true)映射。
this.HasRequired(t => t.cat1)
.WithMany(t => t.posts)
.HasForeignKey(d => d.excat1);
this.HasRequired(t => t.cat2)
.WithMany(t => t.posts)
.HasForeignKey(d => d.excat2);
this.HasRequired(t => t.cat3)
.WithMany(t => t.posts)
.HasForeignKey(d => d.excat3);
您需要将WillCascadeOnDelete(false)添加到您的cat2Map和cat3Map的树上方的类别中。
cat2Map:
this.HasRequired(t => t.cat1)
.WithMany(t => t.cat2s)
.HasForeignKey(d => d.excat1)
.WillCascadeOnDelete(false);
cat3Map:
this.HasRequired(t => t.cat1)
.WithMany(t => t.cat3s)
.HasForeignKey(d => d.excat1)
.WillCascadeOnDelete(false); <-- Add this
this.HasRequired(t => t.cat2)
.WithMany(t => t.cat3s)
.HasForeignKey(d => d.excat2)
.WillCascadeOnDelete(false); <-- Add this