复合键,EF6和插入顺序

时间:2018-05-24 09:25:18

标签: c# database entity-framework

我的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正在为某些型号排序,但不适用于其他型号。

0 个答案:

没有答案