3

FilteredSetを使用して、システムの現在ログに記録されているユーザーからのデータを自動的に取得しています。これは、現在のユーザーからデータを返し、他のユーザーのデータにアクセスしない動的な方法を提供します。

エンティティを更新するときにも同じことをしたいと思います。FilteredSetを使用してデータベースからエンティティを取得でき、エンティティIDが属していない場合、ユーザーは例外をスローしましたが、最初にエンティティをロードせず、これをアタッチして更新することをお勧めします。

これまでのところ、私は試しました:

public void UpdateOwnable<TEntity>(TEntity entity) where TEntity : class, IEntity, IUserOwnable
{
       var entityLocal = SetOwnable<TEntity>().Local.SingleOrDefault(d => d.Id == entityId);
       if (entityLocal==null)
       {
          entityLocal = this.SetOwnable<TEntity>().Attach(entity);
       }
       this.ChangeTracker.Entries<TEntity>().Single(d => d.Entity == entityLocal).State = EntityState.Modified;
}

問題は、生成されたクエリにWHERE句が含まれていないことです。Where句がエンティティの主キーであるだけでなく、ユーザーIDでもある方法を見つけることを期待しています。

Update Workout
SET name ..
WHERE id = 1
AND idUser = 123;

このSQLクエリは、EntityFrameworkで生成したいものです。idUserの「AND」句を使用します。

これは可能ですか?

4

1 に答える 1

5

EFは、Updateステートメントにwhere条件を追加するためのすぐに使用できる機能を提供していません。たとえば、このオープンソースプロジェクトからのバッチ更新を使用できます。違いは、更新がSaveChanges呼び出しの一部にならないことです(EFがそれをサポートしていないため)。

于 2013-03-21T08:44:47.763 に答える