我的EF6和复合键有问题。假设我有一个类(TableInBetween),它有一个由两个外键组成的复合键(ClassA和ClassB的主键)。为了在数据库中插入几个TableInBetweens,我需要确保已插入ClassA和ClassB并获得其主键的值。 EF6似乎很难搞清楚并尝试插入所有ClassInd = 0和/或ClassBId = 0的TableInBetween对象。最简单的解决方案是首先通过调用SaveChanges()插入所有ClassAs和Bs,然后创建重用那些现有的TableInBetweens数据库ID。但是,这是一个经典的脏解决方案,对于无论出于何种原因需要进行批量插入的情况,可能不适用。
所以,问题是:在尝试保存TableInBetween之前,如何指示ClassA和ClassB需要设置主ID?
[Table("CLASSA")]
public class ClassA
{
[Column("ID"), Key]
public int Id {get; set;}
.
.
.
public ICollection<TableInBetween> InBetweens { get; set; }
}
[Table("CLASSB")]
public class ClassB
{
[Column("ID"), Key]
public int Id {get; set;}
.
.
.
public ICollection<TableInBetween> InBetweens { get; set; }
}
[Table("TABLE_IN_BETWEEN")]
public class TableInBetween
{
[Column("CLASS_A_ID", Order = 1), Key]
public int ClassAId {get; set;}
[Column("CLASS_B_ID", Order = 2), Key]
public int ClassBId {get; set;}
.
.
.
[ForeignKey("ClassAId")]
public virtual ClassA ClassA {get; set;}
[ForeignKey("ClassBId")]
public virtual ClassB ClassB {get; set;}
}
重要提示:看起来这取决于模型,有时可能无法明确地执行某些操作。似乎EF正在为某些型号排序,但不适用于其他型号。