Внешний ключ EF Core через свободный API - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть 2 класса:

public class Item
{
    public int Id { get; set; }
    public string ItemName { get; set; }
}
public class ItemStats //inhenrit from Item
{        
    public int Id { get; set; }
    public int MaxEnhanceLevel { get; set; }

    public Item Item { get; set; }
}

Это TPT, но так как он не поддерживается "из коробки", я не могу использовать наследование. Я знаю, как этого добиться, используя аннотацию данных

 [ForeignKey(nameof(Item))]
 public int Id { get; set; }

Но как я могу сделать это через FluentAPI? Я не хочу аннотации данных в моих классах Entitie.

1 Ответ

0 голосов
/ 09 ноября 2018

У вас есть отношение один к одному с одиночным навигационным свойством , основным объектом Item и зависимым объектом ItemStats с использованием так называемого ассоциация общего первичного ключа , где зависимый объект PK также является FK для основного объекта.

Свободный API для отношений один-к-одному: HasOne, WithOne, HasForeignKey и HasPrincipalKey. Обратите внимание, что аргументы универсального типа для HasForeignKey и HasPrincipalKey (которые обычно опускаются для отношения один-ко-многим) здесь важны, поскольку они определяют, какая сущность является главной, а какая - зависимой.

С учетом вышесказанного, свободная конфигурация для вашей модели:

modelBuilder.Entity<ItemStats>()
    .HasOne(e => e.Item)
    .WithOne()
    .HasForeignKey<ItemStats>(e => e.Id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...