首页 > 解决方案 > 如何将 IdentityDbContext 与两个数据库相关联?

问题描述

我有ASP.Net Core命令行应用程序,我尝试从一个数据库中复制另一个数据库中的数据。所以理想情况下,我想要这样的东西

services.AddDbContext<IdentityDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("FromConnection")));
services.AddDbContext<IdentityDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("ToConnection")));

显然,这是行不通的,因为泛型中的类型是相同的。如果我能做这样的事情:

var fromContext = new IdentityDbContext<IdentityUser>();
var toContext = new IdentityDbContext<IdentityUser>();
services.AddDbContext(fromContext, options => options.UseSqlServer(Configuration.GetConnectionString("FromConnection")));
services.AddDbContext(toContext, options => options.UseSqlServer(Configuration.GetConnectionString("ToConnection")));

这是一个小型实用程序;所以我可以(在某种程度上)在依赖注入上妥协——有没有办法做到这一点?

在这种情况下,我试图从身份表中复制角色和声明;所以同样的问题是IdentityRoleIdentityRoleClaim类 - 但第一步是DbContext单独设置。

更新:如果我要使用这样的派生类DbContext

public class IdentityFromDbContext : IdentityDbContext<IdentityUser> { ... }
public class IdentityToDbContext : IdentityDbContext<IdentityUser> { ... }

然后我需要具备以下条件:

services.AddIdentity<IdentityUser, IdentityRole>()
    .AddEntityFrameworkStores<IdentityDbContext>()

如果我要派生IdentityFromUser等。我会遇到一个问题,我需要修改应用程序模型本身

标签: asp.net-coreentity-framework-coreasp.net-identity

解决方案


您是否考虑过继承自您的分离的上下文MyDbContext

OldDbContext : MyDbContextNewDbContext : MyDbContext


推荐阅读