2013-11-06 4 views
0

Итак, я довольно новичок во всей работе MVC и ASP.NET.Доступ к уже существующим данным Контекст в MVC 5

Я создал новое приложение MVC в VS2013 и теперь настраиваю его. В настоящее время я пишу область администратора, когда могу изменять свойства пользователей.

Весь раздел администрирования связан с adminController. В этом контроллере я создаю новый UserContext для доступа к пользовательской базе данных. Однако, поскольку приложение уже определяет контекст пользователя в AccountController, это не обязательно.

Что было бы лучше всего использовать для доступа к UserContext в моем AdminController?

/редактирование: В комментарии я объяснял это немного подробнее:

Данные-контекст и подключение к базе данных уже существуют. Это не проблема. Моя проблема заключается в том, что у меня есть контроллер учетной записи, который управляет регистрацией, регистрацией и т. Д. Этот контроллер запускается при загрузке страницы. с этим экземпляром у меня также есть экземпляр класса UserManager. В моем контроллере admin я хочу использовать этот экземпляр класса UserManager, а не создавать новый, как я сейчас делаю. Надеюсь, это объясняет это немного лучше.

/edit2: В соответствии с запросами фрагментов кода. Я хочу сделать, чтобы взять экземпляр UserContext из класса AccountController и использовать его в классе 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> 

ответ

1

Различные контроллеры должны иметь различный контекст базы данных. По умолчанию время жизни контроллера MVC равно запросу и, следовательно, контекст не может и не должен использоваться после завершения метода на контроллере.

Создайте контекст в конструкторе AdminController так же, как вы уже делаете в своем AccountController.

+0

Хорошо, сделаю это. Спасибо за ответ – Ruhrpottpatriot

0

Возможно, вы говорите о модели пользователя, которая смоделирована на основе таблиц базы данных. вы будете использовать datacontext, хотя для создания связи между вашей моделью пользователя и таблицей базы данных для пользователей и при этом вы можете создавать, обновлять, удалять пользователя и т. Д.

вы можете создать свой контекст данных через Entityframeworks, NHibernate , или другие стандартные ORMS.

Это основная концепция. Если вы предоставите больше информации, я смогу помочь больше.

+0

Контекст данных и соединение с базой данных уже существуют.Это не проблема. Моя проблема заключается в том, что у меня есть контроллер учетной записи, который управляет регистрацией, регистрацией и т. Д. Этот контроллер запускается при загрузке страницы. с этим экземпляром у меня также есть экземпляр класса UserManager. В моем контроллере admin я хочу использовать этот экземпляр класса UserManager, а не создавать новый, как я сейчас делаю. Надеюсь, это объяснит это немного лучше. – Ruhrpottpatriot

+0

можете ли вы добавить фрагмент кода? –

+0

Добавил его в OP – Ruhrpottpatriot

Смежные вопросы