Вы можете реализовать это, используя 2 контекста БД, один интерфейс и службу, выбирающую контекст из данных, отправленных в запросах API:
Интерфейс контекста БД
public interface IDatabaseContext
{
// add all DbSet declaration here
}
контекст БД
public class DatabaseContext : IDatabaseContext
{
// db context implementation
}
Тест контекст БД
public class TestDatabaseContext: DatabaseContext
{
// add your constructor
}
Служба преобразователя контекста DbContext
public class DbContextResolver
{
public bool IsTest { get; set; }
Настройка DI на стороне сервера
services.AddDbContext<DatabaseContext>(options =>
options.UseSqlServer(
"SqlServer connection string holder ..."))
.AddDbContext<TestDatabaseContext>(options =>
options.UseSqlite(
"Sqlite connection string holder ..."))
.AddScoped<DbContextResolver>())
.AddScoped<IDatabaseContext>(p =>
{
var resolver = p.GetRequiredService<DbContextResolver>();
if (resolver.IsTest)
{
retrun p.GetRequiredService<TestDatabaseContext>();
}
return p.GetRequiredService<DatabaseContext>();
}));
Выбрать контекст БД из запроса
public void Configure(IApplicationBuilder app)
{
app.Use((context, next) =>
{
var resolver = context.RequestServices.GetRequiredService<DbContextResolver>();
resolver.IsTest = context.Request.Query.ContainsKey("test"); // here the context is choosed by query string but you can choose to send an header instead
return next();
}
}
использовать выбранный Контекст БД в контроллере или сервисе
public class MyController : Controller
{
public MyController(IDatabaseContext context)
...
}