代码之家  ›  专栏  ›  技术社区  ›  chobo2

处理级联多对多EF核心?

  •  0
  • chobo2  · 技术社区  · 6 年前

    我不知道如何正确地设置我的表,所以我在尝试多对多的时候不会遇到这样的错误。

    System.Data.SqlClient.SqlException: 'Introducing FOREIGN KEY constraint 'FK_TableB_TableA_TableBId' on table 'TableB' 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. See previous errors.'
    

    public class TableA
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public virtual ICollection<TableB> TableBs { get; set; }
    }
    
    public class TableB
    {
        public int Id { get; set; }
        public int TableCId { get; set; }
        public virtual TableC TableC { get; set; }
        public int TableAId { get; set; }
        public virtual TableA TableA { get; set; }
    }
    
     public class TableAConfig : IEntityTypeConfiguration<TableA>
    {
        public void Configure(EntityTypeBuilder<TableA> builder)
        {
            builder.HasKey(x => x.Id);
            builder.Property(x => x.Id).ValueGeneratedOnAdd();
            builder.Property(x => x.Name).HasMaxLength(100).IsRequired();
        }
    }
    
     public class TableBConfig : IEntityTypeConfiguration<TableB>
    {
        public void Configure(EntityTypeBuilder<TableB> builder)
        {
            builder.HasKey(x => x.Id);
            builder.Property(x => x.Id).ValueGeneratedOnAdd();
        }
    }
    
    //code snippet
    
    //remove all tableB
      company.TableBs.Clear();
    
    
    // add all new dealers.
    foreach (var d in dto.Data)
    {
        company.TableBs.Add(new TableB() { TableCId = d.id, TableA = TableA });
    }
    
       dbContext.SaveChanges();
    

     public class TableC
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Code { get; set; }
    
        public virtual ICollection<TableBs> TableBs { get; set; }
    
    }
    
        public class TableCConfig : IEntityTypeConfiguration<TableC>
    {
        public void Configure(EntityTypeBuilder<TableC> builder)
        {
            builder.HasKey(x => x.Id);
            builder.Property(x => x.Id).ValueGeneratedOnAdd();
    
            builder.Property(x => x.Name).HasMaxLength(50).IsRequired();
            builder.Property(x => x.Code).HasMaxLength(5).IsRequired();
    
        }
    }
    
    0 回复  |  直到 6 年前