Entity Framework Code First - Использование интерфейсов в моделях доменов - PullRequest
0 голосов
/ 11 марта 2020

Допустим, у вас есть Автостоянка, каждая автостоянка вмещает х автомобилей, и каждая машина может иметь разные свойства. Вот так:

public class CarPark
{
    public int Id { get; set; }

    public ICollection<ICar> Cars { get; set; }
}

public interface ICar
{
    string Model { get; set; }
}

public class Volvo : ICar
{
    public string Model { get; set; }

    public string Color { get; set; }
}

public class Bmw : ICar
{
    public string Model { get; set; }

    public int Wheels { get; set; }
}

Как вы справляетесь с таким сценарием, когда модели разные?

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Я нашел решение, вместо того чтобы использовать интерфейс, в котором вы создаете абстрактный класс, я изменил приведенный выше код, чтобы показать, как это делается:

public class CarPark
{
    public int Id { get; set; }

    public virtual ICollection<Car> Cars { get; set; }
}

public abstract class Car
{
    public int Id { get; set; }

    public string Model { get; set; }
}

[Table("Volvo")]
public class Volvo : Car
{
    public string Color { get; set; }
}

[Table("Bmw")]
public class Bmw : Car
{
    public int Wheels { get; set; }
}

Из-за табличной аннотации каждая машина заканчивается В отдельной таблице эта стратегия называется TPT - Таблица на тип. Если атрибут удален, все автомобили окажутся в одной таблице, эта стратегия называется TPH - Таблица на иерархию.

Пример довольно плохой но представьте себе, что каждый автомобиль - поставщик платежей с уникальными настройками или чем-то подобным.

Дополнительная информация: https://www.entityframeworktutorial.net/code-first/inheritance-strategy-in-code-first.aspx

0 голосов
/ 11 марта 2020

Предполагая, что вы имеете в виду, как вам нужно справляться с EF, портя отображение ваших моделей из-за интерфейса: вы можете вручную настроить перевод ваших моделей в методе OnModelCreation вашего DbContext.

Смотрите здесь для получения дополнительной информации: https://docs.microsoft.com/en-us/ef/core/modeling/

...