Как связать IdentityDbContext с двумя базами данных? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть 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<Identity???DbContext>()

И если бы я получил IdentityFromUser и т. Д., Я бы столкнулся с проблемой, что мне нужно изменить модель приложениясам

Ответы [ 3 ]

1 голос
/ 25 сентября 2019

Рассматривали ли вы разделенные контексты, которые наследуются от ваших MyDbContext?

, т. Е. OldDbContext : MyDbContext и NewDbContext : MyDbContext.

0 голосов
/ 25 сентября 2019

В этом случае я предлагаю вам пройти через SQL Server, поскольку в роли и других таблицах есть поле Identity

0 голосов
/ 25 сентября 2019

Рассматривали ли вы использование двух DbContext для соединения двух баз данных вместо копирования данных в другую базу данных? Вы можете зарегистрировать их в startup.cs и добавить их в DI с помощью конструктора.

Ссылка: https://stackoverflow.com/a/58022297/11398810

И вы можете использовать команду add-migration init -context Context1, чтобы указать миграцию, и update-database -context Context1, чтобы обновить базу данных в pmc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...