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
}
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
}
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);