繁体   English   中英

EF代码优先-具有2个或更多相同类型子关系的表

[英]EF code first - Table with 2 or more child relationships of the same type

这个问题已经被问过几次了,但是到目前为止我所看到的解决方案还没有解决这个问题。

我有这样的桌子。

public class TableA
{
   public int Id {get;set;}

   public int TableBRefAId {get; set;}

   public int TableBRefBId {get; set;}

   [Required]
   public TableB ItemA {get;set;}

   [Required]
   public TableB ItemB {get;set;}
}

public class TableB
{
    public int Id {get;set;}

    public virtual IList<TableA> TableAList { get; set; }
}

然后在DataContext中,我有这个。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<TableA>()
            .HasRequired<TableB>(p => p.ItemA)
            .WithMany(pp => pp.TableAList )
            //.HasForeignKey(x => x.TableBRefAId)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<TableA>()
            .HasRequired<TableB>(p => p.ItemB)
            .WithMany(pp => pp.TableAList )
            //.HasForeignKey(x => x.TableBRefBId)
            .WillCascadeOnDelete(false);
    }

当我尝试运行“添加迁移AddedTableA”时,出现以下错误。

指定的架构无效。 错误:由于类型'TableB'不可用,因此未加载关系'TableA_ItemA'。

我需要它工作的方式是TableA具有TableB的2个必需属性。

如果删除了TableA,则不会影响TableB。

如果删除了TableB,则删除了TableA

您应该为TableB实体指定两个集合以表示两个引用;

public class TableB
{
    public int Id { get; set; }

    public virtual IList<TableA> TableItemAList { get; set; }

    public virtual IList<TableA> TableItemBList { get; set; }
}

然后;

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<TableA>()
        .HasRequired<TableB>(p => p.ItemA)
        .WithMany(pp => pp.TableItemAList)
        //.HasForeignKey(x => x.TableBRefAId)
        .WillCascadeOnDelete(false);

    modelBuilder.Entity<TableA>()
        .HasRequired<TableB>(p => p.ItemB)
        .WithMany(pp => pp.TableItemBList)
        //.HasForeignKey(x => x.TableBRefBId)
        .WillCascadeOnDelete(false);
}

首先尝试使TableA类中的ItemA和ItemB虚拟,并在TableB类中添加TableA的另一个虚拟列表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM