【问题标题】:Access already existing data Context in MVC 5在 MVC 5 中访问已经存在的数据上下文
【发布时间】:2013-11-17 22:59:50
【问题描述】:

所以,我对整个 MVC 和 ASP.NET 还是很陌生。

我在 VS2013 中创建了一个新的 MVC 应用程序,现在正在对其进行自定义。 目前我正在编写管理员区域,当我可以修改用户属性时。

整个管理部分绑定到一个 adminController。在这个控制器中,我创建了一个新的 UserContext 来访问用户数据库。 但是,由于应用程序已经在 AccountController 中定义了用户上下文,因此这不是必需的。

在我的 AdminController 中访问 UserContext 的最佳做法是什么?

/edit:在评论中我更详细地解释了它:

数据上下文和与数据库的连接已经存在。这不是问题。我的问题是,我有一个管理登录、注册等的帐户控制器。该控制器在页面加载时被实例化。对于那个实例,我还有一个 UserManager 类的实例。在我的管理控制器中,我想使用 UserManager 类的该实例,而不是像我目前正在做的那样创建一个新实例。希望这能更好地解释它

/edit2:按要求提供代码 sn-ps。我想要做的是从 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

AdminController.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);
    }

UserContext.cs

public class UserContext : IdentityDbContext<ApplicationUser>
{
    public UserContext()
        : base("DefaultConnection")
    {

    }
}

Web.config

<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>

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-5


    【解决方案1】:

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

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

    【讨论】:

    • 好的,会这样做。感谢您的回答
    【解决方案2】:

    您可能正在谈论基于您的数据库表建模的用户模型。 您将使用数据上下文在您的用户模型和用户数据库表之间创建连接,通过这样做您可以创建、更新、删除用户等。

    您可以通过 Entityframeworks、NHibernate 或其他标准 ORMS 创建数据上下文。

    这是核心概念。如果您提供更多信息,我将能够提供更多帮助。

    【讨论】:

    • 数据上下文和数据库连接已经存在。这不是问题。我的问题是,我有一个管理登录、注册等的帐户控制器。该控制器在页面加载时被实例化。对于那个实例,我还有一个 UserManager 类的实例。在我的管理控制器中,我想使用 UserManager 类的该实例,而不是像我目前正在做的那样创建一个新实例。希望这能更好地解释它。
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多