【发布时间】:2015-07-30 22:05:43
【问题描述】:
所以我有一个运行 ASP.NET Identity 2.0 的 ASP.NET MVC 5 应用程序。一切都很好,但我想重构我的代码,我想知道我当前的实现有哪些替代方案。让我解释一下。
我的项目根目录中有控制器,项目的区域文件夹中也有许多控制器。几乎所有这些都继承自 BaseController 类,而后者又继承自 System.Web.Mvc.Controller。这个BaseController 看起来像这样:
public class BaseController()
{
protected ApplicationUserManager _userManager;
protected ApplicationRoleManager _roleManager;
protected readonly MyDbContext _db = new MyDbContext();
public BaseController()
{
}
public BaseController(ApplicationUserManager um, ApplicationRoleManager rm)
{
UserManager = um;
RoleManager = rm;
}
public ApplicationUserManager UserManager { ... }
public ApplicationRoleManager RoleManager { ... }
#region Utility Methods
// Here are over 60 utility methods that are basically queries on _db
#endregion
}
更多的方法正在开发中,我不禁觉得有比将它们放在基类中更好的方法,因为逻辑上不是每个控制器都应该直接继承这些方法。
将它们移至MyDbContext(继承IdentityDbContext)实际上只是将它们移至更适用的文件。我想象的是在MyDbContext 中为每个 DbSet 提供自定义实用程序方法,但我不知道该怎么做。理想的情况如下:
Semester thisSemester = _db.Semesters.GetCurrentSemester();
或
SelectList semesters = _db.Semesters.GetAllSemestersAsSelectList();
在这两个示例中,Semesters 的类型均为 DbSet<Semester>。
谁能提供解决方案?
【问题讨论】:
标签: asp.net-mvc entity-framework entity-framework-6 asp.net-identity asp.net-identity-2