Композитные ключи, EF6 и порядок вставки - PullRequest
0 голосов
/ 24 мая 2018

У меня проблема с 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 разбирает его для некоторых моделей, но не для других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...