Je fais une requête simple avec un. Select () sur une vue de base de données et m'attendais à voir une liste plus courte de colonnes dans le SQL généré:
DbContext.LeadSearch.Select(ls => new
{
ls.Id,
ls.BrokerName,
ls.UpdateDate
}).Take(2).ToList();
Le SQL généré incluait toutes les colonnes cependant:
SELECT TOP(@__p_0) [ls].[Id], [ls].[AssetNumber], [ls].[BrokerId],
[ls].[BrokerName], [ls].[FirstName], [ls].[IsApproved],
[ls].[LastName], [ls].[PurchaseAmount], [ls].[Yadda], [ls].[Yadda2],
... [ls].[UpdateDate] FROM [dp].[vwLeadSearch] AS [ls]
D'après ce que j'ai lu ailleurs, je m'attendais à ce que le code SQL contienne uniquement les colonnes "Sélectionné".
LeadSearch est défini comme un DbSet:
public DbSet<LeadSearch> LeadSearch { get; set; }
Mappé à la vue:
modelBuilder.Entity<LeadSearch>().ToTable("vwLeadSearch").HasKey("Id");
Ceci est avec EF Core 2.1.1.
L'une des "colonnes" que j'ai incluses dans Select () était en fait une propriété calculée sur la classe:
public string Name => FirstName + " " + LastName;
EF était assez malin pour savoir qu'il lui fallait toutes les colonnes pour que cette expression soit complète. Changer mon Select pour obtenir FirstName et LastName au lieu de Name a résolu le problème.