私は、データストレージとしてEntityFrameworkとSQLServer2008を使用するASP.NetMVC3Webサイトに取り組んでいます。また、リポジトリパターンを使用して、すべてのデータアクセスコードを1つの領域に集中させています。
私のアプリケーションには多くのユーザーがいて、すべてのユーザーが多くのプロジェクトを持つことができます。ユーザーは自分のプロジェクトにのみアクセスできる必要があります。現在、私はこのコードを持っています:
public IQueryable<Project> All
{
get {
return context.Projects
.Where(p => p.Owner.ID == Util.GetCurrentUserID())
.Select(p=>p);
}
}
public Project Find(System.Guid id)
{
return context.Projects
.Where(p => p.Owner.ID == Util.GetCurrentUserID())
.FirstOrDefault();
}
あなたが気づいた場合.Where(p => p.Owner.ID == Util.GetCurrentUserID())
は重複しています。そして、私はこれらの正確な条件が散らかっている他のかなりの数の場所を持っています。
DbContextに、この条件をProjectsテーブルに移動するクエリに常に自動的に追加する方法はありますか?
何かのようなもの:
public class MyContext : DbContext
{
public DbSet<Project> Projects
.Where(p => p.Owner.ID == Util.GetCurrentUserID()) { get; set; }
}
また
public class MyContext : DbContext
{
public DbSet<Project> Projects { get {
// Insert a cast from IQuerieable to DBSet below
return Projects
.Where(p => p.Owner.ID == Util.GetCurrentUserID())
.Select(p => p);
}
set; }
}
質問を書いているときにUPDは、最後のバージョンがうまく機能することに気づきました-試してみる必要があります。それでも、コードの最適化とそれをよりドライにするための他のオプションを聞きたいです。
前もって感謝します!!