Обновление пакета Entity Framework Z Plus

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

Вопрос

Я использую метод пакетного обновления Entity Framework Z Plus. Я не могу действовать из-за проблемы ниже. Фактически метод обновления работает хорошо, когда я даю статические значения, такие как tagName="amir1" . Но мне нужно получить Tagdescription из веб-службы или из другой коллекции на основе tagId , метод Update не принимает метод расширения или какой-либо другой метод для выполнения моего требования. Он говорит:

«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 со значением, которое изменяется от строки к другой.

Отказ от ответственности : Я являюсь владельцем проекта Entity Framework Extensions

В этой ситуации мы обычно рекомендуем использовать нашу платную библиотеку, созданную для такого рода ситуаций, и предлагаем высокоэффективную экономию.

пример

// Easiest way
context.BulkSaveChanges();

// Fastest way
context.BulkUpdate(tags);



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему