可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约

Anky521 2018-06-08 04:43:34


如上图所示,只要我给 public int DepartID { get; set; } 加上 [ForeignKey("Department")] 属性 更新数据库就会报错
将 FOREIGN KEY 约束 'FK_dbo.DataDetails_dbo.Departments_DepartID' 引入表 'DataDetails' 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
无法创建约束。请参阅前面的错误消息

如果不加那个属性,它会在数据库自动创建外键,并这个外键无数据的,显示的时候就不能调出相应的科室名称


如果我在 [Department_ID] 手动填入对应的科室ID的话 显示界面就能正常显示 科室名称。 但是这个[Department_ID]字段在Controller里面又无法操作,EF又不认DepartID为外键,又不给我设置它是外键,非要自己创建个外键又不能操作,怎么解决!!
...全文
2361 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1
简单说,这个时候你的 user、department 的外键就不应该使用级联,或者你的最终的表与 user 、department 的外键就不应该使用级联。总之是应该斩断级联——外间可以设置但是不应该启用级联。按说你使用的框架在 ForeignKeyAttribute 上应该有属性设置是否要启用级联。
  • 打赏
  • 举报
回复
这是设计模式错误。一个记录有两个(或两个以上)外键,而两个外键又间接地外键依赖于同一主键,这样就造成了逻辑上的死循环。这个完全可以通过静态分析来发现。 实际上这说明你的数据库表模型存在着冗余,故意冗余!你这个时候就不要再去用人家自动化的delete 和 update 外键功能了,只能删除外键、自己手动维护系统。谁让你冗余设计呢?
Anky521 2018-06-08
  • 打赏
  • 举报
回复
public class DepartItem { [Key] public int ID { get; set; } /// <summary> /// 项目名称 /// </summary> [Display(Name = "项目")] [Required] public string ItemName { get; set; } /// <summary> /// 科室ID /// </summary> [Display(Name = "科室")] [ForeignKey("Department")] public int DepartID { get; set; } /// <summary> /// 科室外键类 /// </summary> public virtual Department Department { get; set; } } 这个确实也引用了,但是这个项目也是属于科室里面的啊,不引用怎么办?
正怒月神 版主 2018-06-08
  • 打赏
  • 举报
回复
肯定你的实体层创建的有问题。 错误的大概意思,估计是department和departitem相互循环引用了。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧