c# - 复合键、EF6 和插入顺序
问题描述
我对 EF6 和复合键有疑问。假设我有一个类 (TableInBetween),它有一个由两个外键(ClassA 和 ClassB 的主键)组成的复合键。为了在数据库中插入几个这样的 TableInBetweens,我需要确保 ClassA 和 ClassB 已被插入并获得主键的值。EF6 似乎很难弄清楚这一点,并尝试插入 ClassAId = 0 和/或 ClassBId = 0 的所有 TableInBetween 对象。最简单的解决方案是首先通过调用 SaveChanges() 插入所有 ClassAs 和 B,然后创建重用现有的 TableInBetween数据库 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 正在为某些模型整理它,但不是为其他模型。