所以,我对整个 MVC 和 ASP.NET 很陌生。
我在 VS2013 中创建了一个新的 MVC 应用程序,现在正在对其进行自定义。目前,当我可以修改用户属性时,我正在编写管理员区域。
整个管理部分绑定到一个 adminController。在这个控制器中,我创建了一个新的 UserContext 来访问用户数据库。然而,由于应用程序已经在 AccountController 中定义了一个用户上下文,这应该不是必需的。
在我的 AdminController 中访问 UserContext 的最佳做法是什么?
/编辑:在评论中,我更详细地解释了它:
数据上下文和与数据库的连接已经存在。这不是问题。我的问题是,我有一个管理登录、注册等的帐户控制器。该控制器在页面加载时被实例化。对于那个实例,我还有一个 UserManager 类的实例。在我的管理控制器中,我想使用 UserManager 类的该实例,而不是像我目前正在做的那样创建一个新实例。希望这能更好地解释它
/edit2:根据要求提供代码片段。我想要做的是从 AccountController 类中获取 UserContext 实例并在 AdminController 类中使用它。我还可以补充一点,与数据库的连接工作正常。我可以查询一切。只是我不愿意创建另一个 UserContext 实例。
AccountController.cs:
[Authorize]
public class AccountController : Controller
{
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new UserContext())))
{
}
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
}
public UserManager<ApplicationUser> UserManager { get; private set; }
//
// GET: /Account/Login
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
// Additional GET/POST/PUT/DELETE methods
管理员控制器.cs
/// <summary>The admin controller.</summary>
public class AdminController : Controller
{
private UserContext userContext = new UserContext();
public ActionResult Admin()
{
return this.View();
}
public ActionResult ManageUser()
{
var users = this.userContext.Users.ToList();
return this.PartialView(users);
}
用户上下文.cs
public class UserContext : IdentityDbContext<ApplicationUser>
{
public UserContext()
: base("DefaultConnection")
{
}
}
网页配置
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-N44Web-20131104100543.mdf;Initial Catalog=aspnet-N44Web-20131104100543;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>