Entity Framework Z Plus 批量更新

Entity Framework Z Plus Batch Update

我正在使用 Entity Framework Z Plus 批量更新方法。由于以下问题,我无法继续。实际上,当我给出像 tagName="amir1" 这样的静态值时,Update 方法效果很好。但我需要从 Web 服务或基于 tagId 的另一个集合获取 Tagdescription,更新方法不接受扩展方法或任何其他方法来完成我的 requirement.Its 说法

"LINQ to Entities does not recognize the method 'System.String GetTagDescription(Int32)' method, and this method cannot be translated into a store expression.".

希望我的要求现在清楚了。如果有任何其他方法可以满足我的要求,请指导我。

这是我的代码:

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
}

按如下方式编写代码:

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
}

免责声明:我是项目的所有者Entity Framework Plus

遗憾的是,无法将 BatchUpdate 与从一行更改为另一行的值一起使用。

免责声明:我是项目的所有者Entity Framework Extensions

在这种情况下,我们通常建议使用我们为这种情况构建的付费库,并提供高性能的保存操作。

例子

// Easiest way
context.BulkSaveChanges();

// Fastest way
context.BulkUpdate(tags);

编辑:回答评论

If I can't use updated row so why the signature of action is misleading and give me possibility to write like this: e => new Entity { Name = e.Name + "Edited" }

对于大多数供应商,例如 SQL Server,您的表达是受支持的。你给出一个全局表达式,这样我们就可以申请了。你的表情不会从一行到另一行发生变化,它是相同的表达式。

不支持从一行到另一行给出特定表达式。