在inasp.net mv核心实体框架代码优先

时间:2019-12-05 14:28:02

标签: asp.net model-view-controller entity-framework-6 entity core

问题 我的Core MVC应用程序中有两个实体。 BolgeToBolge实体中有两个Bolge ID。其中一个是FromBolgeFk,另一个是ToBolgeFk。 在Visual Studio 2019的程序包管理器控制台中执行“更新数据库”命令后,出现如下错误: “在表'BolgeToBolge'上引入FOREIGN KEY约束'FK_BolgeToBolge_Bolge_ToBolgeFk'可能会导致循环或多个级联路径。请指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 无法创建约束或索引。查看以前的错误。

我的代码:

Bolge.cs实体模型:

public class Bolge
    {
        [Key]
        public int Id { get; set; }

        [Display(Name ="Bölge")]
        [StringLength(100)]
        [Required]
        public string BolgeAd { get; set; }

        [ForeignKey("Ilce")]
        public int IlceFk { get; set; }
        public virtual Ilce Ilce { get; set; }

        public virtual ICollection<BolgeToBolge> BolgeToBolgeFroms { get; set; }
        public virtual ICollection<BolgeToBolge> BolgeToBolgeToes { get; set; }
        public virtual ICollection<Rezervasyon> RezervasyonsFrom { get; set; }
        public virtual ICollection<Rezervasyon> RezervasyonsTo { get; set; }
    }

BolgeToBolge实体:

public class BolgeToBolge
    {
        [Key]
        public int Id { get; set; }

        [ForeignKey("FromBolge")]
        [InverseProperty("BolgeToBolgeFroms")]
        public int FromBolgeFk { get; set; }
        public virtual Bolge FromBolge { get; set; }

        [ForeignKey("ToBolge")]
        [InverseProperty("BolgeToBolgeToes")]
        public int ToBolgeFk { get; set; }
        public virtual Bolge ToBolge { get; set; }
    }

ApplicationDbContext:DbContext

{
 modelBuilder.Entity<BolgeToBolge>()
    .HasKey(BtB=> new {BtB.FromBolgeFk, BtB.ToBolgeFk });

            modelBuilder.Entity<BolgeToBolge>()
                .HasOne(BtB => BtB.FromBolge)
                .WithMany(BtB => BtB.BolgeToBolgeFroms)
                .HasForeignKey(BtB => BtB.FromBolgeFk).OnDelete(DeleteBehavior.Cascade);

            modelBuilder.Entity<BolgeToBolge>()
                .HasOne(BtB => BtB.ToBolge)
                .WithMany(BtB => BtB.BolgeToBolgeToes)
                .HasForeignKey(BtB => BtB.ToBolgeFk).OnDelete(DeleteBehavior.Cascade);

    }

如何解决问题。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

 modelBuilder.Entity<BolgeToBolge>()
            .HasOne(BtB => BtB.ToBolge)
            .WithMany(BtB => BtB.BolgeToBolgeToes)
            .HasForeignKey(BtB => BtB.ToBolgeFk).OnDelete(DeleteBehavior.NoAction);