Marco de entidad carga parcial
-
12-12-2019 - |
Pregunta
Tengo las siguientes columnas en mi mesa
- id (int)
- Nombre (Nvarchar) generalmente <100 caracteres
- DATOS (NVARCHAR) Promedio de 1MB
Estoy escribiendo un programa que pasará por cada fila y realizará algunas operaciones al campo Nombre.Ya que solo estoy usando el campo Nombre y el campo de datos es muy grande, ¿es posible dirigir EF solo cargar el campo ID y nombre?
Solución
seguro es
ctx.YourDbSet.Select(p=> new { Id = p.Id, Name = p.Name});
Este método está seleccionando en una clase anónima.
Si desea guardar esto de vuelta, puede hacerlo con algo con lo que llamo a una entidad ficticia:
foreach(var thing in ctx.YourDbSet.Select(p=> new { Id = p.Id, Name = p.Name}))
{
var dummy = new YourEntity{Id = thing.Id};
ctx.YourDbSet.Attach(dummy);
dummy.Name = thing.Name + "_";
}
ctx.SaveChanges();
Este método funciona con el seguimiento de instantáneas, ya que EF solo realiza un seguimiento de los cambios realizados después de la llamada adjunte para enviarlo en la declaración de actualización.Esto significa que su consulta solo contendrá una actualización para la propiedad Nombre en esa entidad (es decir, no tocará datos)
Nota: desea asegurarse de hacerlo en un contexto que controle firmemente, ya que no puede adjuntar un objeto que ya está conectado al gráfico de seguimiento de EF.En el caso anterior, la selección será no adjunte entidades al gráfico como su anonimato (para que esté seguro usando el mismo contexto)