首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在现有数据库ASP.NET核心MVC和EF核心(DB-First)中使用身份

如何在现有数据库ASP.NET核心MVC和EF核心(DB-First)中使用身份
EN

Stack Overflow用户
提问于 2021-05-03 02:49:36
回答 1查看 449关注 0票数 0

我在我的项目中使用ASP.NET Core5.0MVC和EF Core5。我创建了一个带有表User的SQL Server数据库,但当我开始实现授权、注册和角色管理时,我决定使用核心身份。

我看了很多文章,学习了如何从原始数据库(Scaffold-DbContext)逆向工程模型,如何使用继承(Add-Migration)创建基于Identity AspNetRolesAspNetUsers等具有自己属性的数据库(Add-Migration)……

但我没有找到主要问题的答案:我如何在现有数据库中使用标识,例如,在表(“篮子”)中指定AspNetUsers([Id])的外键,同时保持核心标识的所有功能。也许我应该用2个DbContexts或者别的什么,我不知道,我只是一个初学者。

具有自定义角色和用户的My IdentityContext

代码语言:javascript
复制
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在数据库中创建的标识表)。

代码语言:javascript
复制
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.

提前感谢你的回答。

EN

回答 1

Stack Overflow用户

发布于 2021-10-16 20:53:23

在.NET核心之前,曾经有一个非常简单的图形用户界面来实现这一点。基本上,您需要通过反向工程SqlServer身份数据库来创建一个DbContect。在Scaffold 5(核心)中,您需要在项目的PackageManager控制台上使用.NET -DbContext。然而,它不是直观的。当尝试创建“模型”作为主项目的一部分时,它失败。它创建一个包含单个空类的新项目。然后,在该项目上运行Scaffold-DbContext。整个反向工程的SqlServer身份数据库完全是在类的模型中构建的。一次事件!非常干净。构建它,然后从主项目引用它。实际上,比以前的方法更快、更干净。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67360034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档