0

所以,我对整个 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>
4

2 回答 2

1

不同的控制器应该有不同的数据库上下文。默认情况下,MVC 控制器的生命周期等于请求,因此在控制器上的方法完成后不能也不应该使用上下文。

就像您在 AccountController 中所做的一样,在 AdminController 的构造函数中实例化一个上下文。

于 2013-11-07T20:23:49.983 回答
0

You are probably talking about user model which is modeled based on your database tables. you will use a datacontext though to create the connection between your user model and the database table for users and by doing so you can create, update, remove user and etc.

you may create your data context through Entityframeworks, NHibernate, or other standard ORMS.

This is the core concept. If you provide more info I will be able to help more.

于 2013-11-06T16:57:01.240 回答