Actualización de Entity Framework Z Plus por lotes

entity-framework entity-framework-6 entity-framework-plus

Pregunta

Estoy usando el método de actualización por lotes de Entity Framework Z Plus. No puedo continuar debido a la siguiente cuestión. En realidad, el método de actualización funciona bien cuando doy valores estáticos como tagName="amir1" . Pero necesito obtener la Tagdescription de un servicio web o de otra colección basada en el tagId , el método de actualización no acepta un método de extensión ni ningún otro método para cumplir mi requisito.

"LINQ to Entities no reconoce el método 'System.String GetTagDescription (Int32)', y este método no se puede traducir a una expresión de tienda".

Espero que mi requerimiento sea claro ahora. Por favor guíeme si hay algún otro enfoque para mi requerimiento.

Aquí está mi código:

using (var context = new TrialsDBEntities())
{
     context.tblTags.Where(x => (tagIdCollection.Contains(x.tagId))).
                Update(m => new tblTag { tagDescription = m.tagId.GetTagDescription(), tagName = "amir1" });
}

public static string GetTagDescription(this int i)
{
     return "test" + i;

     ///Replace above line with call to database or web service call 
     getting some text by giving i as input
}

Respuesta aceptada

Escriba su código de la siguiente manera:

using (var context = new TrialsDBEntities())
{
   var tagsToBeUpdated =  context.tblTags.Where(x => (tagIdCollection.Contains(x.tagId))).AsNoTracking().ToList();

   //Only use this code block if your tagsToBeUpdated list is too large
   Parallel.ForEach(tagsToBeUpdated, tagToBeUpdated =>
   {
      var tagDescription = GetTagDescription(tagToBeUpdated.tagId);
      tagToBeUpdated.tagDescription = tagDescription;
      context.Entry(tagToBeUpdated).State = EntityState.Modified;
   });

   //Only use this code block if your tagsToBeUpdated list is not too large
   foreach(var tagToBeUpdated in tagsToBeUpdated)
   {
      var tagDescription = GetTagDescription(tagToBeUpdated.tagId);
      tagToBeUpdated.tagDescription = tagDescription;
      context.Entry(tagToBeUpdated).State = EntityState.Modified;
   }

   context.SaveChanges();         
}

public static string GetTagDescription(int i)
{
     return "test" + i;

     ///Replace above line with call to database or web service call 
     //getting some text by giving i as input
}

Respuesta experta

Descargo de responsabilidad : soy el propietario del proyecto Entity Framework Plus

Desafortunadamente, eso no es posible usar BatchUpdate con un valor que cambia de una fila a otra.

Descargo de responsabilidad : soy el propietario del proyecto Entity Framework Extensions

En esta situación, normalmente recomendamos utilizar nuestra biblioteca de pago que está diseñada para este tipo de situación y ofrece operaciones de ahorro de alto rendimiento.

Ejemplo

// Easiest way
context.BulkSaveChanges();

// Fastest way
context.BulkUpdate(tags);



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué