@Taifunov

Как избавиться от ошибки «Both an existing DbConnection and a connect» при тестировании приложения в xUnit?

https://gist.github.com/Taifunov/5b50081e2a86a0fc6... - мой dbContext
https://gist.github.com/Taifunov/dcf99ec62140e071d... - мой класс с тестом

Получаю такую ошибку:
System.InvalidOperationException : Both an existing DbConnection and a connection string have been configured. When an existing DbConnection is used the connection string must be set on that connection.


Подскажите, что я не так делаю? Я понимаю что ошибка указывает на использование двух подключений, но я взял с примера майкрософта по тестированию от сюда: https://docs.microsoft.com/en-us/ef/core/miscellan...
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
SergeyEgorov
@SergeyEgorov
Веб разработчик
Ну так в примере https://docs.microsoft.com/en-us/ef/core/miscellan... , из которого вы код взяли английским же по белому написано https://docs.microsoft.com/en-us/ef/core/miscellan...

А вы тем не менее у себя именно и настраиваете два поставщика баз в контексте.

Здесь настраиваемся на использование файлового экземпляра:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
	optionsBuilder.UseSqlite("Filename=dbTest.db", options =>
	{
		options.MigrationsAssembly(Assembly.GetExecutingAssembly().FullName);
	});

	if (!optionsBuilder.IsConfigured)
	{
		optionsBuilder.UseSqlite("Filename=dbTest.db");
	}

	base.OnConfiguring(optionsBuilder);
}


А в тесте хотим чтобы база разворачивалась в памяти:
var connection = new SqliteConnection("DataSource=:memory:");
connection.Open();

var options = new DbContextOptionsBuilder<MyDbContext>()
	.UseSqlite(connection)
	.Options;


Исправьте метод OnConfiguring:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
	if (!optionsBuilder.IsConfigured)
	{
		optionsBuilder.UseSqlite("Filename=dbTest.db", options =>
		{
			options.MigrationsAssembly(Assembly.GetExecutingAssembly().FullName);
		});
	}

	base.OnConfiguring(optionsBuilder);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы