有3个实体:
-
用户
-
事件
-
评论 .
User 有 ICollection<Event>
和 ICollection<Review>
.
Event 具有虚拟用户导航属性, ICollection<Review>
Review 类的结构
public int Id { get; set; }
public string Text { get; set; }
public int Mark { get; set; }
public ReviewStatus ReviewStatus { get; set; }
public int EventId { get; set; }
public virtual Event Event { get; set; }
public int UserId { get; set; }
public virtual AppUser User { get; set; }
我得到了 - 引入FOREIGN KEY可能会导致循环或多个级联路径 . 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束 . 无法创建约束 . 查看以前的错误 .
我可以通过在 DbContext
的 ModelCreating
方法上添加它来解决它:
modelBuilder.Entity<Event>().
HasMany(e => e.Reviews).
WithRequired(e => e.Event).
WillCascadeOnDelete(false);
modelBuilder.Entity<AppUser>().
HasMany(u => u.Reviews).
WithRequired(r => r.User).
WillCascadeOnDelete(false);
但在此之后我无法从数据库中删除事件或用户,因为发生了外键错误 . 那还有另一种解决方案吗?
1 回答
您应该在删除时决定在外键的位置无法删除或插入null,您可以删除
User
并为Review
中的任何已删除的Event
插入null,并且有孤立的Review
,这里是使Event
与Review
关系成为可空的代码:还记得懒惰加载
Event
和Review
与Include
删除用户,否则null
将不会被插入,其他要点是当你面对这样的情况时User
有很多Events
和Events
有很多Reviews
你必须这样做Event
为Review
自己为null插入,EF不会为你做这件事,比如打击示例:我希望我能够传达一般方法 .