@Dantilar

Типы отображения в Entity Framework, какие их преимущества и недостатки?

Госода, доброго времени суток.

Столкнулся с тем, что я не совсем понимаю какой путь решения проблемы мне выбрать. Например имеется следующая структура:
public class Car {
     public string Title { get; set; }
     public Color Color { get; set; }
}

public class Color {
     public string ColorName { get; set; }
     public int ColorCode { get; set; }
}


В Entity Framework доступны такие настройки для хранения иерархии даных:
- "Таблица для иерархии (Table per hierarchy)"
- "Таблица для каждого конкретного типа (Table per concrete type)"
- "Таблица для каждого типа (Table per type)"

Обьясните пожалуйста для каких целей используют каждый из этих способов хранения даных. Так же очень интересует производительность!

Исходим из моего примера иерархии данных (приведет пример из головы, но в моделях будет много других классов, которые используются сразу в нескольких других моделях. Например цвет будет еще и в вертолетах, и в самолетах...)

Благодарю
  • Вопрос задан
  • 2666 просмотров
Пригласить эксперта
Ответы на вопрос 1
effetto
@effetto
.Net разработчик
Дело в том, что Ваш пример из головы не верен и сильно утрирован. Вот хорошая серия статей на эту тему.

TpH стоит использовать, когда разделение по классам либо носит маркерную задачу, либо классы отличаются не сильно. Если алгоритмы обработки данных иерархии схожи. Если требуется выполнять запросы по всей иерархии. Например у вас есть класс автомобилей и субклассы по маркам машин.

TpT стоит использовать, если каждый тип в иерархии самодостаточен и имеет собственные алгоритмы обработки, когда общие запросы на иерархию выполняются только для родителя. Например у вас есть класс транспортных средств с полями скорости, грузоподъемности и т.д. и субклассы по категориям.

TpCT стоит использовать если каждый тип в иерархии самодостаточен и общие запросы не требуются, но требуется общий функционал во время разработки. Например, я использую почти всегда базовую сущность, содержащую первичный ключ, таймстамп и поля дат операций.

Стоит обратить Ваше внимание, что правильным подходом при разработке больших приложений будет использование различный подходов в зависимости от задач каждого конкретного класса. Кроме того, предлагаю Вам обратить внимание на технологию CodeFirst как можно раньше. Она предоставляет FluentApi, который дает гибкость настройки БД.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы