У меня проблема с EF6 и составными ключами.Предположим, что у меня есть класс (TableInBetween), который имеет составной ключ, состоящий из двух внешних ключей (первичный ключ ClassA и ClassB).Чтобы вставить несколько из этих TableInBetweens в базу данных, мне нужно убедиться, что ClassA и ClassB были вставлены и получили значение для их первичного ключа.EF6, похоже, испытывает затруднения при выяснении этого и пытается вставить все объекты TableInBetween с ClassAId = 0 и / или ClassBId = 0. Самое простое решение - сначала вставить все ClassAs и B, вызвав SaveChanges (), а затем создать TableInBetweens, которые повторно используют существующиеидентификаторы базы данных.Однако это классическое грязное решение, и оно может не подходить для случаев, когда вам необходимо выполнить массовую вставку по какой-либо причине.
Итак, вопрос: Как мне указатьчто ClassA и ClassB должны иметь первичный Id перед попыткой сохранить TableInBetween?
[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 разбирает его для некоторых моделей, но не для других.