...可能会导致循环或多个级联路径.指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束 [英] ... may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints
问题描述
实体框架核心
执行更新数据库时抛出错误
Throwing error while doing update-database
错误:-在表 'UserRoleRelationship' 上引入 FOREIGN KEY 约束 'FK_UserRoleRelationship_UserRoels_ParentUserRoleId' 可能会导致循环或多个级联路径.指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束.无法创建约束或索引.
Error:- Introducing FOREIGN KEY constraint 'FK_UserRoleRelationship_UserRoels_ParentUserRoleId' on table 'UserRoleRelationship' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint or index.
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; }
}
推荐答案
对于您当前的模型设计,它将创建以下迁移:
For your current model design, it will create migration below:
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
在删除UserRoleRelationship
时都会删除UserRole
中的记录,导致多次级联删除.
FK_UserRoleRelationship_UserRole_ChildUserRoleId
and FK_UserRoleRelationship_UserRole_ParentUserRoleId
both will delete the records in UserRole
when deleting UserRoleRelationship
which will cause multiple cascade delete.
作为一种解决方法,尝试将 int
设为 int?
,如下所示:
For a workaround, try to make int
as int?
like below:
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
这篇关于...可能会导致循环或多个级联路径.指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!