这已被问过几次,但到目前为止我看到的解决方案还没有解决问题。
我有这样的表格。
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);
}
当我尝试运行“Add-Migration AddedTableA”时,我收到以下错误。
指定的架构无效。错误:未加载“TableA_ItemA”关系,因为“TableB”类型不可用。
我需要它的方式来表明TableA有2个必需的TableB属性。
如果删除TableA,TableB不受影响。
如果删除TableB,TableA
也是如此答案 0 :(得分:5)
您应该为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);
}
答案 1 :(得分:0)
首先尝试将ClassA中的ItemA和ItemB设为虚拟 并在TableB类中添加另一个TableA虚拟列表