我在我的项目中使用ASP.NET Core5.0MVC和EF Core5。我创建了一个带有表User的SQL Server数据库,但当我开始实现授权、注册和角色管理时,我决定使用核心身份。
我看了很多文章,学习了如何从原始数据库(Scaffold-DbContext)逆向工程模型,如何使用继承(Add-Migration)创建基于Identity AspNetRoles、AspNetUsers等具有自己属性的数据库(Add-Migration)……
但我没有找到主要问题的答案:我如何在现有数据库中使用标识,例如,在表(“篮子”)中指定AspNetUsers([Id])的外键,同时保持核心标识的所有功能。也许我应该用2个DbContexts或者别的什么,我不知道,我只是一个初学者。
具有自定义角色和用户的My 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.提前感谢你的回答。
发布于 2021-10-16 20:53:23
在.NET核心之前,曾经有一个非常简单的图形用户界面来实现这一点。基本上,您需要通过反向工程SqlServer身份数据库来创建一个DbContect。在Scaffold 5(核心)中,您需要在项目的PackageManager控制台上使用.NET -DbContext。然而,它不是直观的。当尝试创建“模型”作为主项目的一部分时,它失败。它创建一个包含单个空类的新项目。然后,在该项目上运行Scaffold-DbContext。整个反向工程的SqlServer身份数据库完全是在类的模型中构建的。一次事件!非常干净。构建它,然后从主项目引用它。实际上,比以前的方法更快、更干净。
Scaffold-DbContext "Server=win2k22.ladybug.xxxx;initial catalog=xxxxx ;user id=Remotexxx;password=Remotexxx;MultipleActiveResultSets=True;App=EntityFramework"" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Forcehttps://stackoverflow.com/questions/67360034
复制相似问题