entity-framework - ...可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束
问题描述
实体框架核心
执行更新数据库时抛出错误
错误:- 在表“UserRoleRelationship”上引入 FOREIGN KEY 约束“FK_UserRoleRelationship_UserRoels_ParentUserRoleId”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束或索引。
public class UserRoleRelationship
{
[Key]
public int Id { get; set; }
[Required]
public Guid UserRoleRelationshipId { get; set; }
public virtual UserRole ChildUserRole { get; set; }
public int ChildUserRoleId { get; set; }
public virtual UserRole ParentUserRole { get; set; }
public int ParentUserRoleId { get; set; }
}
public class UserRole
{
[Key]
public int Id { get; set; }
[Required]
public Guid UserRoleId { get; set; }
public virtual Role Role { set; get; }
public int RoleId { set; get; }
public virtual U.User User { set; get; }
public int UserId { set; get; }
}
解决方案
对于您当前的模型设计,它将在下面创建迁移:
migrationBuilder.AddForeignKey(
name: "FK_UserRoleRelationship_UserRole_ChildUserRoleId",
table: "UserRoleRelationship",
column: "ChildUserRoleId",
principalTable: "UserRole",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
migrationBuilder.AddForeignKey(
name: "FK_UserRoleRelationship_UserRole_ParentUserRoleId",
table: "UserRoleRelationship",
column: "ParentUserRoleId",
principalTable: "UserRole",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
FK_UserRoleRelationship_UserRole_ChildUserRoleId
并且FK_UserRoleRelationship_UserRole_ParentUserRoleId
两者都会在UserRole
删除时删除记录,UserRoleRelationship
这将导致多个级联删除。
对于解决方法,请尝试int
如下int?
所示:
public int? ParentUserRoleId { get; set; }
这将创建
migrationBuilder.AddForeignKey(
name: "FK_UserRoleRelationship_UserRole_ParentUserRoleId",
table: "UserRoleRelationship",
column: "ParentUserRoleId",
principalTable: "UserRole",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
注意
需要先删除UserRole
,再删除UserRoleRelationship
推荐阅读
- c# - System.Net.WebException:'错误:ConnectFailure(连接被拒绝)'
- javascript - RegExp 如何在此示例中替换双引号上的单引号
- css - 仅适用于平板电脑和手机的 CSS 规则,而不适用于台式机?
- laravel - 在流明中每分钟执行一次工作
- audio - 什么 FFMPEG 命令将以特定时间戳覆盖 2 个音频文件?
- templates - 维基媒体模板中的空间
- python - 如何在启动 Chrome 并尝试使用 Selenium 使用 ChromeDriver 访问网页时解决“获取默认适配器失败”错误
- geoserver - 重投影:wms级联还是客户端js?
- python - NiFi Parse PDF 使用 Python Tika 错误:ExecuteStreamCommand
- swift - Swift,遗传算法中的协议和泛型