Estoy haciendo una consulta simple con un .Select () en una vista de base de datos y esperaba ver una lista más corta de columnas en el SQL generado:
DbContext.LeadSearch.Select(ls => new
{
ls.Id,
ls.BrokerName,
ls.UpdateDate
}).Take(2).ToList();
El SQL generado incluía todas las columnas aunque:
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]
Por lo que he leído en otra parte, esperaba que el SQL tuviera solo las columnas "Seleccionadas".
LeadSearch se define como un DbSet:
public DbSet<LeadSearch> LeadSearch { get; set; }
Asignado a la vista:
modelBuilder.Entity<LeadSearch>().ToTable("vwLeadSearch").HasKey("Id");
Esto es con EF Core 2.1.1.
Una de las "columnas" que incluí en Select () era en realidad una propiedad calculada en la clase:
public string Name => FirstName + " " + LastName;
EF fue lo suficientemente inteligente como para saber que tenía que obtener todas las columnas para que esta expresión se completara. Cambiar mi Selección para obtener Nombre y Apellido en lugar de Nombre solucionó el problema.