【发布时间】:2021-07-25 08:09:41
【问题描述】:
我在我的项目中使用 ASP.NET Core 5.0 MVC 和 EF Core 5。我创建了一个带有表User的SQL Server数据库,但是当我开始实现授权、注册和角色管理时,我决定使用Core Identity。
我浏览了很多文章,学习了如何从原始数据库(Scaffold-DbContext)逆向工程模型,如何使用继承(@ 987654325@)...
但我没有找到主要问题的答案:如何在现有数据库中使用 Identity,例如,在表(“篮子”)中指定 AspNetUsers([Id]) 的外键,同时保留所有核心身份的功能。也许我应该使用2个DbContexts或其他什么,我不知道,我只是一个初学者。
我的IdentityContext 具有自定义角色和用户:
public partial class HotelServiceContext : IdentityDbContext<User, Role, int>
{
public HotelServiceContext()
{
}
public HotelServiceContext(DbContextOptions<HotelServiceContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<IdentityUserLogin<int>>().ToTable("UserLogins");
modelBuilder.Entity<IdentityUserToken<int>>().ToTable("UserTokens");
modelBuilder.Entity<IdentityUserClaim<int>>().ToTable("UserClaims");
modelBuilder.Entity<IdentityUserRole<int>>().ToTable("UserRoles");
modelBuilder.Entity<IdentityRoleClaim<int>>().ToTable("RoleClaims");
modelBuilder.Entity<Role>().ToTable("Roles");
}
}
我的DBContext,我通过执行命令Scaffold-DbContext 得到的(它还包含身份表的工作,我之前使用Update-Database 在数据库中创建)。
public TestContext(DbContextOptions<TestContext> options)
: base(options)
{
}
public virtual DbSet<Administrator> Administrators { get; set; }
public virtual DbSet<AppUser> AppUsers { get; set; }
public virtual DbSet<Basket> Baskets { get; set; }
public virtual DbSet<Building> Buildings { get; set; }
public virtual DbSet<Client> Clients { get; set; }
public virtual DbSet<Feedback> Feedbacks { get; set; }
// ... And other generated code.
提前感谢您的回答。
【问题讨论】:
-
好的,现在我已经找到了解决这个问题的方法。我将现有数据库中生成的代码添加到
IdentityContext,之后在OnModelCreating方法中,我使用API Fluent将依赖项添加到AspNetUser表并删除生成的DBContext。它似乎工作
标签: sql-server entity-framework-core asp.net-core-mvc asp.net-identity ef-database-first