循环或多级联路径

Cycles or multiple cascade paths

我有以下数据模型及其关联模型 类。我一直在删除依赖项以使其正确,但我一直收到此错误。

数据模型

我找不到为什么模型中有级联路径。恐怕无法减少依赖。

型号类

public class DataFormat
{
    public int DataFormatID { get; set; }
    [Display (Name = "Data Format Name")]
    [Remote("DuplicateFormatName", "DataFormats", HttpMethod = "POST", ErrorMessage = "Data Format Name already Exists")]
    public string FormatName { get; set; }
    [Display (Name = "Data Format Type")]
    public string FormatType { get; set; }
    [Display (Name = "Precision Digits")]
    public string PrecisionDigits { get; set; }
    [Display (Name = "Scaling Digits")]
    public string ScalingDigits { get; set; }
    [Display (Name = "Description in German")]
    public string DescriptionDE { get; set; }
    [Display (Name = "Description in English")]
    public string DescriptionEN { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime ModifiedOn { get; set; }
    public string CreatedBy { get; set;}
    public string ModifiedBy { get; set; }

    public virtual ICollection<TcSet> TcSets { get; set; }
}

public class Lsystem
{
    public int LsystemID { get; set; }
    [Display (Name = "System Name") ]
    [Remote("DuplicateSystemName", "Lsystems", HttpMethod = "POST", ErrorMessage = "System Name already Exists")]
    public string LsystemName { get; set; }
    [Display (Name = "Material Number")]
    public string MaterialNumber { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime ModifiedOn { get; set; }
    public string CreatedBy { get; set; }
    public string ModifiedBy { get; set; }
    [Display(Name = "Description in English")]
    public string DescriptionEN { get; set; }
    [Display(Name = "Description in German")]
    public string DescriptionDE { get; set; }

    public int LsystemFamilyID { get; set; }

    public virtual LsystemFamily LsystemFamily { get; set; }
    public virtual ICollection<Option> Options { get; set; }
}

public class LsystemFamily
{
    public int LsystemFamilyID { get; set; }
    [Display (Name = "Family Name")]
    [Remote("DuplicateFamilyName","LsystemFamilies",HttpMethod = "POST",ErrorMessage= "System Family Name already Exists")]
    public string FamilyName { get; set; }
    public int LsystemCount { get; set; }
    [Display ( Name = "Description in English")]
    public string DescriptionEN { get; set; }
    [Display (Name = "Description in German")]
    public string DescriptionDE { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime ModifiedOn { get; set; }
    public string CreatedBy { get; set; }
    public string ModifiedBy { get; set; }

    public virtual ICollection<Lsystem> Lsystems { get; set; }
}

public class Option
{
    public int OptionID { get; set;}
    [Display (Name = "Option Type")]
    public string OptionName { get; set; }
    [Display (Name ="Description in English")]
    public string DescriptionEN { get; set; }
    [Display(Name = "Description in German")]
    public string DescriptionDE { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime ModifiedOn { get; set; }
    public string CreatedBy { get; set; }
    public string ModifiedBy { get; set; }

    public int TechnicalCharacteristicID { get; set; }
    public int LsystemID { get; set; }

    public virtual ICollection<OptionValue> OptionValues { get; set; }
    public virtual TechnicalCharacteristic TechnicalCharacteristic { get; set; }
    public virtual Lsystem Lsystem { get; set; }
   // public virtual ICollection< SetValue> SetValue { get; set; }
}

public class OptionValue
{
    public int OptionValueID { get; set; }
    [Display(Name = "Option Value")]
    public string OptionVal { get; set; }

    public int OptionID { get; set; }
   // public int SetValueID { get; set; }

    public virtual Option Option { get; set; }
    public virtual ICollection< SetValue> SetValue { get; set; }
}

public class SetValue
{
    public int SetValueID { get; set; }
    [Display(Name = "Value")]
    public string Value { get; set; }
    [Display(Name="Internal")]
    public bool Status { get; set; }

    //public int LsystemID { get; set; }
    //public int OptionID { get; set; }
    public int TcSetID { get; set; }
    public int OptionValueID { get; set; }

    //public virtual Lsystem Lsystem { get; set; }
    //public virtual Option Option { get; set; }
    public virtual OptionValue OptionValue { get; set; }
    public virtual TcSet TcSet { get; set; }

}

public class TcSet
{
    public int TcSetID { get; set; }
    [Display (Name = "Technical characteristic Property name")]
    public string SetName { get; set; }
    [Display(Name = "PhysicalUnit")]
    public string PhysicalUnit { get; set; }
    [Display (Name = "Data Usage")]
    public DataUsage DataUsage { get; set; }
    [Display (Name = "Data Status")]
    public DataStatus DataStatus { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime ModifiedOn { get; set; }
    [Display (Name = "Description in German")]
    public string DescriptionDE { get; set; }
    [Display (Name = "Description in English")]
    public string DescriptionEN { get; set; }
    public string CreatedBy { get; set; }
    public string ModifiedBy { get; set; }

    public int TechnicalCharacteristicID { get; set; }
    public int DataFormatID { get; set; }

    public virtual ICollection<SetValue> SetValues { get; set; }
    public virtual DataFormat DataFormat { get; set; }
    public virtual TechnicalCharacteristic TechnicalCharacteristic { get; set; }
}

public class TechnicalCharacteristic
{
    public int TechnicalCharacteristicID { get; set; }
    [Display (Name = "Technical Characteristic Name")]
    public string TCName { get; set; }
    [Display (Name = "Description in English")]
    public string DescriptionEN { get; set; }
    [Display (Name = "Description in German")]
    public string DescriptionDE { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime ModifiedOn { get; set; }
    public string CreatedBy { get; set; }
    public string ModifiedBy { get; set; }

    public virtual ICollection<TcSet> TcSets { get; set; }
    //public virtual ICollection<Option> Options { get; set; }
}

现在我的错误出现在表 Options 和 technicalCharacteristics 之间。我之前在使用 LSystem 和 SetVal & Options 时遇到了错误。

正确完成任务的解决方法是什么? 我还没有尝试过流畅的 API。

我认为您的错误即将到来,因为 EntityFramework 无法处理选项 class 中 TechnicalCharacteristicID 的空状态。如果您对 TechnicalCharacteristic 为空没有问题,请在您的选项 class 中执行以下操作。它应该消除你的错误:

        public int? TechnicalCharacteristicID { get; set; }

也就是说,您的选项 class 将变为...

public class Option
{
    public int OptionID { get; set; }
    [Display(Name = "Option Type")]
    public string OptionName { get; set; }
    [Display(Name = "Description in English")]
    public string DescriptionEN { get; set; }
    [Display(Name = "Description in German")]
    public string DescriptionDE { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime ModifiedOn { get; set; }
    public string CreatedBy { get; set; }
    public string ModifiedBy { get; set; }

    public int LsystemID { get; set; }

    public virtual ICollection<OptionValue> OptionValues { get; set; }

    public int? TechnicalCharacteristicID { get; set; }
    public virtual TechnicalCharacteristic TechnicalCharacteristic { get; set; }
    public virtual Lsystem Lsystem { get; set; }
    // public virtual ICollection< SetValue> SetValue { get; set; }
}

对其他错误表做同样的事情。我希望这回答了你的问题!祝你好运。

这是另一种方法,您可以执行相同的操作并且需要技术特性。我上周用我自己的一个模型做了这个。抱歉这么久才回复。 (对其他文件执行相同的操作。)

在您的上下文文件中覆盖以下方法...

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Option>()
            .HasRequired(x => x.TechnicalCharacteristic)
            .WithMany(y => y.Options)
            .HasForeignKey(a => a.TechnicalCharacteristicID)
            .WillCascadeOnDelete(false);

        base.OnModelCreating(modelBuilder);
    }

模型在哪里...

public class Option
{
    public int OptionID { get; set; }
    [Display(Name = "Option Type")]
    public string OptionName { get; set; }
    [Display(Name = "Description in English")]
    public string DescriptionEN { get; set; }
    [Display(Name = "Description in German")]
    public string DescriptionDE { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime ModifiedOn { get; set; }
    public string CreatedBy { get; set; }
    public string ModifiedBy { get; set; }

    public int LsystemID { get; set; }

    public virtual ICollection<OptionValue> OptionValues { get; set; }

    public int TechnicalCharacteristicID { get; set; }
    public virtual TechnicalCharacteristic TechnicalCharacteristic { get; set; }
    public virtual Lsystem Lsystem { get; set; }
    // public virtual ICollection< SetValue> SetValue { get; set; }

    DateTime d = new DateTime();
}


public class TechnicalCharacteristic
{
    public int TechnicalCharacteristicID { get; set; }
    [Display(Name = "Technical Characteristic Name")]
    public string TCName { get; set; }
    [Display(Name = "Description in English")]
    public string DescriptionEN { get; set; }
    [Display(Name = "Description in German")]
    public string DescriptionDE { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime ModifiedOn { get; set; }
    public string CreatedBy { get; set; }
    public string ModifiedBy { get; set; }

    public virtual ICollection<TcSet> TcSets { get; set; }
    public virtual ICollection<Option> Options { get; set; }

}

希望对您有所帮助。