当我尝试通过数据库模型ef构建架构时,我对设计数据库架构存在问题。 我需要根据这种方案获得模型:
我的DbContext
:
public class AppContext : DbContext
{
public AppContext() : base("AppDbContext")
{
Database.Delete();
Database.CreateIfNotExists();
}
public DbSet<A1> A1 { get; set; }
public DbSet<A2> A2 { get; set; }
public DbSet<A1_A2> A1_A2 { get; set; }
public DbSet<B> B { get; set; }
public DbSet<C> C { get; set; }
public DbSet<D> D { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<A1>()
.HasMany(a => a.A1_A2)
.WithRequired(a => a.A1)
.HasForeignKey(a => a.A1_id)
.WillCascadeOnDelete(true);
modelBuilder.Entity<A2>()
.HasMany(a => a.A1_A2)
.WithRequired(a => a.A2)
.HasForeignKey(a => a.A2_id)
.WillCascadeOnDelete(true);
modelBuilder.Entity<A1_A2>()
.HasMany(a => a.B)
.WithRequired(a => a.A1A2)
.HasForeignKey(a => a.A1A2_id)
.WillCascadeOnDelete(true);
modelBuilder.Entity<B>()
.HasMany(a => a.C)
.WithRequired(a => a.B)
.HasForeignKey(a => a.B_id)
.WillCascadeOnDelete(true);
modelBuilder.Entity<B>()
.HasMany(a => a.D)
.WithRequired(a => a.B)
.HasForeignKey(a => a.B_id)
.WillCascadeOnDelete(true);
modelBuilder.Entity<C>()
.HasMany(a => a.D)
.WithRequired(a => a.C)
.HasForeignKey(a => a.C_id)
.WillCascadeOnDelete(true);
base.OnModelCreating(modelBuilder);
}
}
实体:
public class Base
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
public class A1 : Base
{
public ICollection<A1_A2> A1_A2 { get; set; } = new HashSet<A1_A2>();
}
public class A2 : Base
{
public ICollection<A1_A2> A1_A2 { get; set; } = new HashSet<A1_A2>();
}
public class A1_A2 : Base
{
public A1 A1 { get; set; }
public int A1_id { get; set; }
public A2 A2 { get; set; }
public int A2_id { get; set; }
public ICollection<B> B { get; set; } = new HashSet<B>();
}
public class B : Base
{
public A1_A2 A1A2 { get; set; }
public int A1A2_id { get; set; }
public ICollection<D> D { get; set; } = new HashSet<D>();
public ICollection<C> C { get; set; } = new HashSet<C>();
}
public class C : Base
{
public B B { get; set; }
public int B_id { get; set; }
public ICollection<D> D { get; set; } = new HashSet<D>();
}
public class D : Base
{
public C C { get; set; }
public int C_id { get; set; }
public B B { get; set; }
public int B_id { get; set; }
}
这是我得到的错误:
在表'D'上引入FOREIGN KEY约束'FK_dbo.D_dbo.B_B_id'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。
无法创建约束或索引。查看先前的错误。