如何将IdentityDbContext与两个数据库关联?

时间:2019-09-24 23:05:33

标签: asp.net-core entity-framework-core asp.net-identity

我有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等,我会遇到一个问题,我需要修改应用程序模型本身

3 个答案:

答案 0 :(得分:1)

您是否考虑过将继承自MyDbContext的上下文分开?

OldDbContext : MyDbContextNewDbContext : MyDbContext

答案 1 :(得分:0)

您是否考虑过使用两个DbContext连接两个数据库而不是将数据复制到另一个数据库?您可以在startup.cs中注册它们,并使用构造函数对其进行DI。

参考:https://stackoverflow.com/a/58022297/11398810

您可以使用命令add-migration init -context Context1指定迁移,并使用update-database -context Context1更新pmc中的数据库。

答案 2 :(得分:0)

在这种情况下,建议您通过SQL Server 因为角色表和其他表具有“身份”字段