了解Asp.Net MVC身份和Owin

时间:2017-07-27 01:17:01

标签: entity-framework asp.net-mvc-4 asp.net-identity owin

免责声明:我已经阅读并看过很多教程/视频,不幸的是我仍然不清楚这是如何工作的。我所知道的:

  1. 在应用程序启动 ConfigureAuth 时执行包含

    的操作

    app.CreatePerOwinContext(GE.Core.DbContexts.ApplicationDbContext.Create);

  2. 这又转到 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");
    }
    

    }

  3. 问题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执行相同的操作?但最重要的是问题是如何运作的?

0 个答案:

没有答案