だから、私はMVCとASP.NET全体にかなり慣れていません。
VS2013 で新しい MVC アプリケーションを作成し、現在それをカスタマイズしています。現在、ユーザーのプロパティを変更できるときに管理者エリアを書いています。
admin セクション全体が 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
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>