【问题标题】:How can I use Identity with my existing database ASP.NET Core MVC and EF Core (DB-First)如何在现有数据库 ASP.NET Core MVC 和 EF Core(DB-First)中使用 Identity
【发布时间】: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


【解决方案1】:

在 .NET Core 之前,也曾经有一个非常简单的 GUI 来实现这一点。基本上,您需要通过对 SqlServer 身份数据库进行逆向工程来创建 DbContect。 在 .NET 5(Core) 中,您需要在项目的 PackageManager 控制台上使用 Scaffold-DbContext。但是,它并不直观。 尝试创建“模型”作为主项目的一部分时失败。 答案是用一个空类创建一个新项目。然后,在该项目上运行 Scaffold-DbContext。整个反向工程 SqlServer Identity Db 完全建立在该类的模型中。一次性活动!很干净。构建它,然后从主项目中引用它。实际上,比旧方法更快更清洁。

Scaffold-DbContext "Server=win2k22.ladybug.xxxx;initial catalog=xxxxx ;user id=Remotexxx;password=Remotexxx;MultipleActiveResultSets=True;App=EntityFramework&quot;"  Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-02
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2019-10-07
    • 2021-08-24
    • 2020-07-21
    相关资源
    最近更新 更多