Если у меня есть три класса в платформе объекта.
class Base {}
class Left : Base {}
class Right : Base {}
и я звоню DBContext.Bases.ToList();
Это возвращает все экземпляры Base
полностью введенный в их связанные наследованные типы, как некоторые люди заметили, производительность EF на больших структурах наследования не является большой по меньшей мере. Мой фактический запрос в моем проекте является 600 строками долго, только для возврата одного объекта и занимает 2 секунды для генерации.
Они запрашивают выполнения намного быстрее, если Вы говорите это, какой тип возвратить, поскольку это не должно присоединяться через целую структуру. например.
DBContext.Bases.OfType<Left>.ToList();
or
DBContext.Bases.OfType<Right>.ToList();
Однако я теперь хочу ТОЛЬКО возвратить базовый класс. Выполнение Unfortunalty
DBContext.Bases.OfType<Base>.ToList();
делает то же как DBContext. Основания. ToList ();
Это получает ЦЕЛУЮ структуру наследования... Есть ли какой-либо путь (не делая новый тип в EF) ТОЛЬКО возврата класса Основа при просмотре Основного набора?
Извините я не могу войти в свою фактическую учетную запись...
Возможно, я не ясно выражался, я хочу возвратить все объекты (включая Основу, Левую и правую), но я только хочу, чтобы Базовый класс был возвращен, даже если в базе данных они - фактические Левые и правые классы.
OFTYPE был хорошим предложением, но он отфильтровывает все мои объекты, потому что ни один не фактический Базовый тип. Но я хочу возвратить только значения Базового типа в объекте Базового типа.
Какие-либо идеи?
Предполагая, что вы можете использовать LINQ, не могли бы вы использовать что-то вдоль линий следующего быстрого и грязного примера?:
var result = from item in DBContext.Bases.ToList()
where (!item.GetType().IsSubclassOf(typeof(Base)))
select item;