如何将Identity类迁移至模型类库并更新现有数据库
把Identity类迁移到模型类库并为现有数据库生成Identity表的步骤
我来一步步帮你搞定这个问题,毕竟把Identity迁移到类库并整合现有数据库确实需要几个关键步骤,别担心,跟着来就行:
1. 给模型类库配置Identity依赖和核心类
首先确保你的模型类库已经安装了正确的NuGet包:
- 打开NuGet包管理器,给类库安装
Microsoft.AspNet.Identity.EntityFramework(要和EF6.4版本兼容,选对应版本,比如6.0.x系列即可) - 若需自定义角色,可额外安装
Microsoft.AspNet.Identity.Core(不过通常前者已包含核心功能)
接下来在模型类库中创建Identity相关实体类:
- 创建
ApplicationUser类,继承自IdentityUser,如果需要扩展用户属性(比如关联现有数据库的用户表字段),可以在这里添加:public class ApplicationUser : IdentityUser { // 示例:添加自定义字段关联现有用户表 // public int ExistingUserId { get; set; } // public virtual ExistingUser ExistingUser { get; set; } } - 如果需要自定义角色,创建
ApplicationRole类继承自IdentityRole:public class ApplicationRole : IdentityRole { // 自定义角色属性,比如描述信息 // public string Description { get; set; } }
然后修改你现有的Database First生成的DbContext,让它继承自Identity的DbContext:
// 替换为你模型类库的命名空间 namespace YourModelLibraryNamespace { public class YourExistingDbContext : IdentityDbContext<ApplicationUser> { // 保留原有Database First生成的构造函数,确保指向正确的连接字符串 public YourExistingDbContext() : base("Name=YourConnectionStringName") { } // 保留原有Database First生成的DbSet定义 // 示例:public DbSet<Product> Products { get; set; } // 可选:若自定义了角色,重写OnModelCreating配置 protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // 可选:修改Identity表的默认名称(比如去掉AspNet前缀) // modelBuilder.Entity<IdentityUser>().ToTable("Users"); // modelBuilder.Entity<IdentityRole>().ToTable("Roles"); } } }
2. 调整MVC项目的Identity引用
现在要把MVC项目自动生成的Identity代码切换到模型类库的实现:
- 删除MVC项目中的
Models/IdentityModels.cs文件(里面是自动生成的本地Identity类和DbContext) - 打开MVC项目的
App_Start/Startup.Auth.cs,替换命名空间引用为模型类库的,确保Owin上下文使用类库的DbContext和ApplicationUser:// 替换为模型类库的命名空间 using YourModelLibraryNamespace; // 确认Owin上下文创建的是类库的DbContext和UserManager app.CreatePerOwinContext(YourExistingDbContext.Create); app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); - 打开账户相关控制器(
AccountController、ManageController等),同样替换命名空间引用,确保所有用到Identity的地方都指向模型类库的ApplicationUser和DbContext
3. 配置EF迁移并生成Identity表
因为你的数据库已经存在,我们需要生成仅针对Identity表的迁移,避免影响现有表:
- 打开Visual Studio的Package Manager Console(PMC)
- 在PMC的「默认项目」下拉菜单中选择你的模型类库(这一步非常关键,否则迁移会生成到MVC项目中)
- 若类库尚未启用迁移,先运行命令启用:
Enable-Migrations - 生成初始Identity迁移,加上
-IgnoreChanges参数跳过现有表的检查:
这个命令会创建一个迁移文件,仅包含Identity相关表的创建语句,不会修改你已有的数据库表Add-Migration InitialIdentitySetup -IgnoreChanges - 最后更新数据库,将Identity表添加到现有数据库:
Update-Database
4. 验证和收尾
- 运行MVC项目,尝试注册一个用户,检查数据库是否生成了
AspNetUsers、AspNetRoles、AspNetUserRoles等Identity相关表 - 如果需要自定义Identity表名称(比如去掉AspNet前缀),可以回到DbContext的
OnModelCreating方法中配置,修改后重新生成迁移并更新数据库即可(记得还是在模型类库下运行PMC命令)
内容的提问来源于stack exchange,提问作者Computer
相关产品推荐
相关产品推荐

