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

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

Сообщение Anonymous »

Я столкнулся с проблемой внедрения зависимостей в моем проекте .NET с использованием 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.cs:

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

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.cs:

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

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#»