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?

¿Fue útil?

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)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top