我正在使用實體框架和SQL Server 2008作爲數據存儲的ASP.Net MVC3網站。此外,我正在使用Repository模式將所有數據訪問代碼集中在一個區域中。實體框架每個用戶的行級安全
在我的應用程序中,我有很多用戶,每個用戶都可以有很多項目。用戶只能訪問他們自己的項目。 目前,我有這樣的代碼:
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; }
}
OR
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而寫的問題,實現了最後一個版本可以只是工作 - 需要嘗試。仍然希望聽到代碼優化的其他選項並使其更加乾爽。
在此先感謝!
如果您找到自己的解決方案,請將其作爲答案發布,以便有同樣問題的人可以找到幫助。 – rcdmk
@rcdmk,當然我會的。這就像一個共同的主題,不是嗎? – trailmax