首页 > 解决方案 > 引入 FOREIGN KEY 约束可能会导致循环或多个级联

问题描述

我有以下 CODE FIRST 课程:

public class License
{
    public License()
    {
        Assignments = new List<FeatureAssignment>();
    }

    public virtual List<FeatureAssignment> Assignments { get; set; }
    public bool CanExpire { get; set; }
    public int LicenseId { get; set; }

    public int ProductId { get; set;}
    public virtual Product Product { get; set; }
}

public class FeatureAssignment
{
    public int FeatureAssignmentId { get; set; }

    public virtual License License { get; set; }
    public int LicenseId { get; set; }

    public virtual LicenseFeature LicenseFeature { get; set; }
    public int LicenseFeatureId { get; set; }
}

public class LicenseFeature
{
    public int LicenseFeatureId { get; set; }
    [Column(TypeName = "VARCHAR")]
    [StringLength(450)]
    [Index(IsUnique = true)]
    public string FeatureName { get; set; }
    public string Description { get; set; }

    public int ProductId { get; set;}
    public virtual Product Product { get; set;}
}

最后但并非最不重要的

public class Product
{
    public int ProductId { get;set;}
    public string ProductName { get;set;}
    public virtual ICollection<License> Licenses { get; set; }
    public virtual ICollection<LicenseFeature> LicenseFeatures { get; set; }
}

因此,目的是为专用产品提供许可证。每个许可证可以有多个功能分配,一个产品可以有多个许可证。

现在,当创建数据库时,我收到以下错误:

System.Data.SqlClient.SqlException:“在表“LicenseFeatures”上引入 FOREIGN KEY 约束“FK_dbo.LicenseFeatures_dbo.Products_ProductId”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

也许我想念树木的福雷斯特,但我认为应该可以为专用许可证分配功能?我错过了外键的属性吗?

*********** 更新 **********

我提供了所有受影响的课程。在第一次发布中,缺少产品类-对此感到抱歉:-(

标签: c#sql-serverentity-framework

解决方案


推荐阅读