Как я могу настроить контекст моей модели, чтобы получать только те объекты, которые
базового типа, а не те, которые происходят от него.
Вы не можете. Каждый Sub является База. Таким образом, запрос всех баз включает в себя все сабвуферы. Например, следующий код должен быть успешным:
Base b = db.Bases.Where(i => i.Id == 1).Single();
if (b is Sub)
begin
Sub s = (Sub)b;
. . .
end
else //other Sub
begin
Sub2 s = (Sub2)b;
. . .
end
Вы можете получить анонимный тип только с помощью свойств базового класса.
И, задавая этот вопрос предполагает , что наследование может не подходить для вашего сценария.
Если вы хотите, чтобы он выбирал сущности типа Base, но не , а не подтипа Sub, то вы можете сделать это с помощью запроса:
var q = from b in db.Bases
where !(b is Sub)
select b;
Что означает:
SELECT [b].[Id], [b].[Discriminator], [b].[Name], [b].[Size]
FROM [Bases] AS [b]
WHERE [b].[Discriminator] IN (N'Sub', N'Base')
AND NOT ([b].[Discriminator] = N'Sub')
Но вы не можете (в настоящее время) исключить все подтипы, не перечислив их. Например, этот запрос:
var q2 = from b in db.Bases
where b.GetType() == typeof(Base)
select b;
Не будет полностью переведен в SQL и отфильтрует подтипы на клиенте.