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」句を使用します。
これは可能ですか?