2016-12-01 1 views
1

ストーリーはどのように

私はIRepositoryパターン化実装をからかっていたIQueryableオブジェクトにラムダ式を呼び出します。すべて正常ですが、私はUpdateManyメソッドに問題があります。

オリジナルメソッド

元のメソッドは、Entity Frameworkのクエリを使用しています。 更新()。もちろんそれは、(DBコンテキストを期待して、私は与えられたタイプのちょうどリストDBのコンテキストを、使用しないような方法

嘲笑このようないくつかの

 public virtual void UpdateMany(IQueryable<T> query, Expression<Func<T, T>> entityInitializer) 
    { 
     query.Update(entityInitializer); 
     this.DbContext.SaveChanges(); 
    } 

、のIQueryableのためのエンティティの拡張メソッドは動作しません。例外は多くの賢明な情報なしでスローされます)。私のメソッドは同じ引数を受け取りますが、それらを解析する方法はわかりません。

例式

.UpdateMany(x.IsActive, new TestStuff { IsActive = false }); 

はしたがって、基本的に、リポジトリ内のすべてのアクティブなTestStuffため、falseに設定するのisActive。それは、特定のオブジェクト

TLにもちろん を拘束すべきではありません。DRは はそれにラムダ式を呼び出す方法、クエリを持って?

+0

質問lambdaを使用できない場合は、単純なForEachを試してみて、if inを追加してアクティブになっているかどうかを制御できますか?私はあなたがリスト(IEnumerable)のものを持つことができると仮定しています – Raskayu

+0

この特定のケースではうまくいくはずですが、実装されたメソッド呼び出しを受け入れる必要がありますので、何とか両方の式を解析して、テキストでは本当に望ましくない –

+0

* Entity Frameworkのquery.Update()* AFAIKそこから来るそのような標準的なEFメソッドはありません? –

答えて

0

私たちは、「更新」メソッドを再実装することになったが、それが思われるほど明らかではなかったです。 Z.EntityFramework.Plus.BatchUpdate.EF6から

BulkUpdateとUpdate拡張クラス。