Entity Framework Junction (i sh) Код отображения таблицы - PullRequest
0 голосов
/ 05 февраля 2020

Как сопоставить соединительную таблицу со значениями в EF v6.2?

Допустим, у вас есть сущности с именами "Item1", "Item2" и сопоставлена ​​другая сущность из них:

public class Item1
{
    [Key]
    public long Id { get; set; }

    public virtual ICollection<MapItem> { get; set; }
}

public class Item2
{
    [Key]
    public int Id { get; set; }

    public virtual ICollection<MapItem> { get; set; }
}

public class MapItem
{
    public long Item1ID {get; set;} //PK, FK
    public int Item2ID {get; set;} //PK, FK

    public decimal Value {get; set;}
    public string Name {get; set;}

    public virtual Item1 {get; set;}
    public virtual Item2 {get; set;}
}

EDMX автоматически генерирует это, но как мне построить это с помощью code-first / FluentAPI для создания доступной коллекции сущности MapItem?

Я попытался обновить сопоставленную сущность для использования [Key(Order = 1)] и [Key(Order = 2)] для значений PK & FK для MapItem.

Это кажется странным сценарием, учитывая, что это не истинная таблица соединений из 2 сущностей, но также содержит значение.

1 Ответ

0 голосов
/ 05 февраля 2020

Здесь я смог получить разрешение с помощью FluentAPI.

Здесь я изменил класс сущности:

public class MapItem
{
    [Key(Order = 1)]
    public long Item1ID {get; set;} //PK, FK

    [Key(Order = 2)]
    public int Item2ID {get; set;} //PK, FK

    public decimal Value {get; set;}
    public string Name {get; set;}

    public virtual Item1 {get; set;}
    public virtual Item2 {get; set;}
}

Затем в конструкторе отношений:

 modelBuilder.Entity<MapItem>().HasKey(q => new
 {
        q.Item1ID, q.Item2ID
 });
​
 modelBuilder.Entity<MapItem>().HasRequired(q => q.Item1).WithMany(q => q.MapItem).HasForeignKey(q => q.Item1ID);
 modelBuilder.Entity<MapItem>().HasRequired(q => q.Item2).WithMany(q => q.MapItem).HasForeignKey(q => q.Item2ID);

Важнейшей частью был метод "HasKey", который правильно отображал сущности.

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