Estoy usando Entity Framework desde .NET 3.5
Tengo dos tablas con 0-1 a muchas relaciones. Digamos Ciudadano y Ciudad. Cada ciudadano tiene una columna de clave extranjera (ID) que lo conecta con la Ciudad.
Cuando selecciono a un solo ciudadano, también necesito seleccionar el nombre de la ciudad donde vive. Debido a que la tabla de ciudades contiene toneladas de datos que no están realmente relacionados con los ciudadanos, no quiero recuperarlos de la base de datos para ahorrar ancho de banda.
Actualmente estoy usando la función Include (), pero toma todos los datos de la Ciudad relacionados con el ciudadano, mientras que solo necesito un nombre.
¿Hay una manera de escribir una consulta para seleccionar una sola celda de toda la fila en EF y sin crear nuevas clases o interfaces o repositorios? Aquí está mi Incluir:
Citizen citizen = db.Citizens.Include("Cities").First(p => p.citizen_id == id);
Lo haces proyectando, por ejemplo,
var c = from c in db.Citizens
where c.citizen_id == id
select new
{
Name = c.Name,
CityName = c.City.Name
};
También puede proyectar en POCOs.
No puede decirle al EF que recupere un objeto de tipo Citizen
con una City
relacionada pero con solo City.Name
completado. El EF no materializará parcialmente una entidad. Use modelos de vista / presentación o DTO en lugar de entidades cuando solo necesite unos pocos campos.