实体框架Z Plus批量更新


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

“LINQ to Entities无法识别方法'System.String GetTagDescription(Int32)'方法,而且此方法无法转换为商店表达式。”

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

这是我的代码:

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的值从一行更改为另一行。

免责声明 :我是项目实体框架扩展的所有者

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

// Easiest way
context.BulkSaveChanges();

// Fastest way
context.BulkUpdate(tags);




许可下: CC-BY-SA
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因