我有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")));
这是一个小型实用程序;所以我可以在某种程度上折衷依赖注入-有什么方法可以做到这一点?
在这种情况下,我尝试从身份表复制角色和声明;因此,IdentityRole
和IdentityRoleClaim
类也存在相同的问题-但第一步是分别设置DbContext
。
更新:如果我要像这样使用来自DbContext
的派生类:
public class IdentityFromDbContext : IdentityDbContext<IdentityUser> { ... }
public class IdentityToDbContext : IdentityDbContext<IdentityUser> { ... }
然后我需要具备以下条件:
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<IdentityDbContext>()
如果我要派生IdentityFromUser
等,我会遇到一个问题,我需要修改应用程序模型本身
答案 0 :(得分:1)
您是否考虑过将继承自MyDbContext
的上下文分开?
即OldDbContext : MyDbContext
和NewDbContext : 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 因为角色表和其他表具有“身份”字段