EF Core DbContext всегда использует неправильную строку подключения при переносе данных между базами данных.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 EF Core DbContext всегда использует неправильную строку подключения при переносе данных между базами данных.

Сообщение Anonymous »

Я столкнулся с проблемой внедрения зависимостей в моем проекте .NET Core с использованием Entity Framework Core. У меня есть несколько DbContexts (

Код: Выделить всё

SourceDbContext
и TargetDbContext), оба наследуются от ApplicationDbContext. Цель состоит в том, чтобы перенести данные из моей базы данных разработки (источник) в мою базу данных QA (цель), используя две разные строки подключения.
Однако, когда я пытаюсь напечатать строку подключения для SourceDbContext он всегда использует строку подключения для TargetDbContext (

Код: Выделить всё

DefaultConnection
), вместо использования предыдущего подключения.
Вот мой код — Program.cs:

Код: Выделить всё

builder.Services.AddDbContext(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection"))
.AddInterceptors(new PerformanceInterceptor()));

builder.Services.AddDbContext(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("PreviousConnection")));

builder.Services.AddDbContext(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));

Код: Выделить всё

DataMigrationService:
public class DataMigrationService
{
private readonly SourceDbContext _sourceContext;
private readonly TargetDbContext _targetContext;

public DataMigrationService(SourceDbContext sourceContext, TargetDbContext targetContext)
{
_sourceContext = sourceContext;
_targetContext = targetContext;
}

public async Task MigrateTableDataAsync()
{
Console.WriteLine($"Source DB Connection String: {_sourceContext.Database.GetConnectionString()}");
Console.WriteLine($"Target DB Connection String: {_targetContext.Database.GetConnectionString()}");

// Fetch data from source DB
var sourceWhiteLists = await _sourceContext.EmailDomainWhiteLists.ToListAsync();

// Fetch data from target DB
var targetWhiteLists = await _targetContext.EmailDomainWhiteLists.ToListAsync();

foreach (var wl in sourceWhiteLists)
{
var targetWL = await _targetContext.EmailDomainWhiteLists.FirstOrDefaultAsync(x => x.Value == wl.Value);
if (targetWL == null)
{
_targetContext.EmailDomainWhiteLists.Add(wl);
}
}

await _targetContext.SaveChangesAsync();
Console.WriteLine("Migration completed.");
}
}

Код: Выделить всё

SourceDbContext:
public class SourceDbContext : ApplicationDbContext
{
public SourceDbContext(DbContextOptions options)
: base(options)
{
}
}
В Program.cs я добавляю SourceDbContext и TargetDbContext с разными строками подключения. Однако SourceDbContext, похоже, наследует строку подключения от ApplicationDbContext, которая всегда указывает на базу данных QA.
Как я могу гарантировать, что SourceDbContext использует своя собственная строка подключения (

Код: Выделить всё

PreviousConnection
), а не наследовать значение по умолчанию от ApplicationDbContext?
Заранее спасибо!
Дополнительная информация:
  • Я попробовал проверить строку подключения с помощью Console.WriteLine, и стало ясно, что SourceDbContext все еще использует DefaultConnection
  • Мне нужны SourceDbContext и TargetDbContext, чтобы использовать соответствующие строки подключения для сред разработки и контроля качества
Любая помощь будет принята с благодарностью!


Подробнее здесь: https://stackoverflow.com/questions/790 ... ng-data-be
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»