.NET Core 和 Entity Framework Core 中的数据库优先与身份验证

Haz*_*zza 5 entity-framework asp.net-identity entity-framework-core asp.net-core

我想使用数据库优先方法通过 EF Core 管理我的数据库,而不仅仅是初始数据库创建。我使用此命令生成实体模型和映射代码:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=MyDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models/Entities -f
Run Code Online (Sandbox Code Playgroud)

现在这工作正常。我只是在身份整合方面苦苦挣扎。目前我有两个独立的上下文,一个是由脚手架命令生成的,另一个是身份上下文,如下所示:

public class IdentityContext : IdentityDbContext<ApplicationUser> {
    public IdentityContext(DbContextOptions<IdentityContext> options)
        : base(options) {
    }

    protected override void OnModelCreating(ModelBuilder builder) {
        base.OnModelCreating(builder);
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);
    }
}
Run Code Online (Sandbox Code Playgroud)

两个上下文都从同一个数据库读取并注册如下:

services.AddDbContext<ApplicationContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddDbContext<IdentityContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
Run Code Online (Sandbox Code Playgroud)

有两个独立的上下文是否合理?当我开始在用户和其他模型之间创建关系时,它会导致未来出现问题吗?我在文档中找不到有关继续使用db-scaffold来生成实体模型和映射的任何内容。

如果我能澄清任何事情,请告诉我。


原始背景

好吧,很明显我原来的问题没有任何好处。

我只是想澄清一下我使用 .NET Core 和实体框架的数据库优先工作流程是否正确。我已经阅读了我能找到的所有有关使用 Database First 的文章,这些文章似乎都以:“现在您已经搭建了数据库,因此可以开始使用 Code First 迁移”。我想继续编写 SQL 并继续将其映射到实体。

为了管理和更新我的应用程序,我正在使用优秀的DbUp项目。所以我编写脚本,将它们应用到数据库

到目前为止,这似乎运行良好。我唯一的问题是如何很好地整合身份。目前我只有两个上下文,一个是我的应用程序,一个是身份上下文。我的应用程序一还映射了所有身份表。它工作正常,但我不确定当我开始将表链接到用户时会发生什么...我相信我确实让它在一个上下文中工作,但我每次都必须修改生成的应用程序上下文,删除所有身份映射并从 IdentityDbContext 继承(以生成身份映射)。我可以更改身份表/我的表的架构,只为我的表生成映射,不包括身份表。然后我可能需要在 ApplicationUser 上手动编写映射属性,这是正确的吗?

基本上,我真的不再觉得 Database First 是 .NET 中的一等公民了。我是否只是错过了一些明显的东西,可以在不修改生成的代码的情况下进行这种“工作”?还是我想得太多了,只需要继续下去?

我想,对于那些漫无目的的事情,我深表歉意。