将 ASP.NET 标识实现到现有数据库中



我有一个现有的项目和SQL数据库,其中包含一个用户表(我们称之为"MyOldUsersTable"(和附加的表(地址,电话,位置等(,具有PK-FK关系。

注意:此数据库不使用成员资格或标识。它是从另一个项目中提取的数据库,"MyOldUsersTable"不包含任何登录信息(密码,上次登录等(。

我首先使用带有标识的Web Api项目,但它生成了默认表(AspNetUsers,AspNetUserRoles,AspNetUserLogins...(

目标:获取 ASP.NET 标识以使用现有表

我尝试了这个解决方案: 如何在使用 Visual Studio 2013 ASP.NET 标识时更改表名? 但是Identity将"MyOldUsersTable"重命名为"MyOldUsersTable1",并将"AspNetUsers"表重命名为"MyOldUsersTable"。那不是很有用。

最好的方法是什么?我看到三个选项:

  1. 解决方案 1:将"MyOldUsersTable"表字段移动到"ASPNETUser"表,并将 PK-FK 与其他表一起更改
  2. 解决方案 2:让标识了解用户表现在是"MyOldUsersTable">
  3. 解决方案3:保留这两个系统,只需在"AspNetUsers"和"MyOldUsersTable"之间添加一个PK-FK。

解决方案2:保留这两个系统,并在"AspNetUsers"和"MyOldUsersTable"之间添加一个PK-FK。可能,但字段中可能有重复项(电子邮件、电话(。此外,要维护两个用户表也不理想。

当在表之间添加"一到零"关系时,它起作用,如下所示:

modelBuilder.Entity<MyOldUsersTable>()
.HasOptional(e => e.ApplicationUser)
.WithRequired(e => e.MyOldUsersTable)
.Map(m => m.MapKey("MyOldUsersTableId"))
.WillCascadeOnDelete(false);

最佳:解决方案 3。通过删除来自 IdentityUser 的所有默认行为,使 Identity 了解用户表现在是"MyOldUsersTable"。

第一步是通过替换以下内容来删除对 IdentityDbContext 的引用:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>

由:

public class ApplicationDbContext : DbContext 

然后将默认用户存储替换为自定义用户存储:

var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));

替换为:

var manager = new ApplicationUserManager(new CustomUserStore(context.Get<ApplicationDbContext>()));

最后,使用所需的接口实现自定义用户存储。例如,密码、电子邮件和安全印章:

public class CustomUserStore : IUserStore<MyOldUsersTable, int>, IUserPasswordStore<MyOldUsersTable, int>, IUserEmailStore<MyOldUsersTable, int>,  IUserSecurityStampStore<MyOldUsersTable, int>

相关内容

  • 没有找到相关文章

最新更新