为什么我的表不是使用从 IdentityDbContext 继承的 MVC5 配置创建的


public class MyContext: IdentityDbContext<ApplicationUser>
    {
        public MyContext()
            : base("MyContext", throwIfV1Schema: false)
        {   
        }
        public static MyContext Create()
        {
            return new MyContext();
        }
        public System.Data.Entity.DbSet<xxxx> xxxxx { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }
}

Startup.Auth:

public void ConfigureAuth(IAppBuilder app)
        {
            // Configure the db context and user manager to use a single instance per request
            app.CreatePerOwinContext(MyContext.Create); // ALTERED THIS
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); // ALTERED THIS
    app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
                Provider = new CookieAuthenticationProvider
                {
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                        validateInterval: TimeSpan.FromMinutes(30),
                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
                }
            });
            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
   }
    }

应用程序用户:

public class ApplicationUser : IdentityUser
    {
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            // Add custom user claims here
            return userIdentity;
        }
    }
// this is the old code, no longer referenced in startup.auth:
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("MyContext", throwIfV1Schema: false)
        {
        }
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }
}

所以基本上,我设置了我的新上下文以继承自 IdentityDbContext,并将旧 ApplicationDbContext 的任何引用替换为我的新引用。它创建了标识表,但我指定的任何 DbSet 表都没有(省略,留下一个作为示例划掉

我只是在这里猜测,因为我看不到你的代码,但我有理由确定我是对的。启动新项目时,必须启用迁移。其工作原理是,它会检查项目中派生自DbContext的对象,然后创建一个包含Configuration.cs文件的Migrations文件夹。此文件显式引用用于迁移的上下文。如果您使用多个从项目中的DbContext派生的对象执行此操作(这里,您有两个,MyContextApplicationDbContext (,它会大惊小怪并告诉您需要指定要使用哪一个。这可能没有发生,因为您之前已使用从 Identity 生成的上下文启用了迁移,并且后来才添加了自己的上下文。

长话短,请检查此配置文件并更改其中的任何违规引用。或者,您可以完全删除Migrations文件夹,然后在包管理器控制台中再次运行Enable-Migrations,确保将MyContext指定为要使用的上下文。

令人讨厌的小变化:no throwIfV1Schema: false

public class MyContext: IdentityDbContext<ApplicationUser>
    {
        public MyContext() : base("MyContext")
        {   
        }
        public static MyContextCreate()
        {
            return new MyContext();
        }
        public System.Data.Entity.DbSet<xxx> xxx{ get; set; }
    }

相关内容

  • 没有找到相关文章

最新更新