J'utilise la méthode de mise à jour par lots d'Entity Framework Z Plus. Je ne peux pas continuer en raison du problème ci-dessous. En fait, la méthode Update fonctionne bien lorsque je donne des valeurs statiques telles que tagName="amir1"
. Mais je dois obtenir la Tagdescription
partir d'un service Web ou d'une autre collection basée sur tagId
. La méthode Update n'accepte pas une méthode d'extension ni aucune autre méthode pour accomplir mon exigence.
"LINQ to Entities ne reconnaît pas la méthode" System.String GetTagDescription (Int32) "et cette méthode ne peut pas être traduite en une expression de magasin.".
J'espère que mes exigences sont claires maintenant. Veuillez me guider s'il existe une autre approche pour mon exigence.
Voici mon code:
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
}
Écrivez votre code comme suit:
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
}
Disclaimer : Je suis propriétaire du projet Entity Framework Plus
Malheureusement, il n'est pas possible d'utiliser BatchUpdate avec une valeur qui change d'une ligne à une autre.
Avertissement : je suis propriétaire du projet Entity Framework Extensions
Dans cette situation, nous vous recommandons normalement d'utiliser notre bibliothèque payante conçue pour ce type de situation et offrant un fonctionnement de sauvegarde performant.
Exemple
// Easiest way
context.BulkSaveChanges();
// Fastest way
context.BulkUpdate(tags);