Почему я получаю дублирующиеся столбцы идентификаторов при использовании таблицы на иерархию в Entity Framework Core? - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь использовать «таблицу на иерархию» для моделирования различных типов учетных записей в моей базе данных с использованием EF Core (2.1), и у меня возникает проблема, связанная с добавлением дополнительных столбцов внешнего ключа для производных типов.Я видел этот вопрос / ответ, но я не думаю, что это так же, как моя ситуация.

Вот мои классы аккаунта:

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

public class Standard : Base
{
    public int ParentId { get; set; }

    [ForeignKey(nameof(ParentId))]
    public Elevated Parent { get; set; }
}

public abstract class Elevated : Base
{
    public ICollection<Base> Accounts { get; set; } = new List<Base>();
}

public class Plus : Elevated
{
}

public class Ultimate : Elevated
{
}

И яЯ настроил TPH следующим образом в моем конструкторе DbContext:

builder.Entity<Base>()
    .HasDiscriminator<string>("Type")
        .HasValue<Ultimate>("ultimate")
        .HasValue<Plus>("plus")
        .HasValue<Standard>("standard");

, и я заполняю некоторые базовые данные, такие как:

builder.Entity<Ultimate>().HasData(new Ultimate() { Id = 1 });
builder.Entity<Plus>().HasData(new Plus() { Id = 2 });
builder.Entity<Standard>().HasData(new Standard() { Id = 3, ParentId = 1 });

, когда я затем запускаю миграции, я получаю эту таблицу:

my table

с этими данными:

my data

Как вы можете видеть, у меня естьElevatedId столбец, который мне не нужен.Если я удаляю коллекцию Accounts из класса Elevated, я не получаю этот столбец;но мне нужно / хочу это свойство навигации.

Что-то, что я должен делать по-другому?

1 Ответ

0 голосов
/ 04 февраля 2019

В вашей модели любая База может быть добавлена ​​к Accounts для Elevated, поэтому для каждой Base требуется свойство ElevatedId Foreign Key.Только Стандарт может иметь Повышенный Parent.

И Стандарт может иметь Повышенный Parent и принадлежать Accounts из различных Повышенных.

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