Entity Framework Z Plusバッチ更新

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

質問

Entity Framework Z Plusバッチ更新メソッドを使用しています。下記の問題により進めません。 tagName="amir1"ような静的な値を与えると、実際にUpdateメソッドがうまくtagName="amir1"ます。しかし、私は、WebサービスやtagIdに基づく別のコレクションからTagdescriptionを取得する必要がありますTagdescriptionメソッドは、拡張メソッドやその他のメソッドを受け入れていないため、私の要件を達成できません。

"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
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ