免责声明:我已经阅读并看过很多教程/视频,不幸的是我仍然不清楚这是如何工作的。我所知道的:
在应用程序启动 ConfigureAuth 时执行包含
的操作app.CreatePerOwinContext(GE.Core.DbContexts.ApplicationDbContext.Create);
这又转到 ApplicationDbContext 类并建立连接
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, Role, int, UserLogin, UserRole, UserClaim>
{
public DbSet<User> geUsers { get; set; }
public ApplicationDbContext(string connString)
: base(connString)
{
Database.SetInitializer(new MySqlInitializer());
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext("name=GEContext");
}
}
问题1 :在登录页面出现之前,有没有办法建立此连接?或者如果我在we.config中保留一个虚拟连接,一旦我登录并用实际连接替换它应该是无效的,该怎么办?
加载登录页面后,我在登录时使用schoolCode,并希望根据该schoolCode建立数据库连接。例如name = GEContext_ [schoolCode]。我的Web.config将包含许多像这样的connectionStrings。
问题2 当我调试我的应用程序时,每次加载页面时,都会触发ApplicationDbContext的Create方法和默认连接
return new ApplicationDbContext("name=GEContext");
似乎总是建立......实际上发生了什么?
这是我剩下的代码:
ApplicationUserManager
public class ApplicationUserManager : UserManager<ApplicationUser, int>
{
public ApplicationUserManager(IUserStore<ApplicationUser, int> store)
: base(store)
{
}
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser, Role, int, UserLogin, UserRole, UserClaim>(context.Get<ApplicationDbContext>()));
....
}
}
我有另一个 GEContext
[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class GEContext : DbContext
{
public GEContext(string connString):base(connString)
{
this.Configuration.LazyLoadingEnabled = false;
Database.SetInitializer(new MySqlInitializer());
}
}
从控制器
可以正常工作private static string schoolCode = (string)System.Web.HttpContext.Current.Session["SchoolCode"];
[Authorize]
public ActionResult About()
{
YearRepository repYear = new YearRepository("name=GEContext_" + schoolCode);
}
我如何使用applicationdbcontext执行相同的操作?但最重要的是问题是如何运作的?