[英]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.