我正在使用实体框架和 SQL Server 2008 作为数据存储的 ASP.Net MVC3 网站。此外,我正在使用存储库模式将所有数据访问代码集中在一个区域中。
在我的应用程序中,我有很多用户,每个用户都可以有很多项目。用户应该只能访问他们自己的项目。目前我有这个代码:
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在写这个问题的时候,意识到最后一个版本可以正常工作——需要尝试一下。仍然希望听到其他代码优化选项并使其更加干燥。
提前致谢!!