【问题标题】:Code First cascade issueCode First 级联问题
【发布时间】:2015-04-15 06:12:46
【问题描述】:

这是我得到的错误: “在表 RolePermissions 上引入 FOREIGN KEY 约束 FK_dbo.RolePermissions_dbo.Permissions_Permission_ID 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。 无法创建约束或索引。查看以前的错误。”

这是我的课程:

public class Permission
{
    [Key]
    public int ID { get; set; }

    [Required]
    public int PermissionObjectId { get; set; }
    public PermissionObject PermissionObject { get; set; }

    [Required]
    public int CategoryId { get; set; }
    public Category Category { get; set; }

    [Required]
    public int ReadWriteId { get; set; }
    public ReadWrite ReadWrite { get; set; }

    public virtual ICollection<Role> Roles { get; set; }
}

public class Role
{
    [Key]
    public int ID { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    public int CategoryId { get; set; }
    public Category Category { get; set; }

    public virtual ICollection<Permission> Permissions { get; set; }

}

public class Category 
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public int OrderID { get; set; }

    public override string ToString()
    {
        return ID.ToString();
    }
}

我做错了什么?

【问题讨论】:

    标签: c# ef-code-first foreign-key-relationship cascade


    【解决方案1】:

    使用 fluent api 设置 CascadeOndelete = fasle。

    查看此链接可能会对您有所帮助:Link

    【讨论】:

      【解决方案2】:

      看起来 EF 正在尝试在角色和权限之间创建某种关系(多对多?),但您也有类别角色和类别权限的一对多关系,它们也有级联删除已启用。

      对于使用不可空键或[Required] 时的外键关系(例如RolePermission 中的CategoryId),默认启用级联删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-26
        • 1970-01-01
        • 1970-01-01
        • 2016-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        相关资源
        最近更新 更多