В основных проектах .net я делаю посев в файле Program.cs следующим образом:
var host = BuildWebHost(args);
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<ApplicationDbContext>();
//.. do seeding
}
catch
{
}
}
host.Run();
В стеке сервисов сервисы зарегистрированы в одном месте? Я попробовал код ниже, но var db = context.OpenDbConnection()
выдает исключение, что сервис не зарегистрирован:
Служба для типа 'ServiceStack.Data.IDbConnectionFactory' не зарегистрирована.
Вот как я это называю:
var host = BuildWebHost(args);
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<IDbConnectionFactory>();
using (var db = context.OpenDbConnection())
{
if(!db.Select<Register>(x => x.Email == "test@example").Any())
{
db.Insert(new Register
{
Email = "test@example.com",
Password = "1234"
});
}
}
//.. do seeding
}
catch
{
}
}
host.Run();
Вот так я регистрирую его в Startup.cs Configure ()
container.Register<IDbConnectionFactory>(c =>
new OrmLiteConnectionFactory(_sqliteFileDb, SqliteDialect.Provider));
container.Register<IAuthRepository>(c =>
new OrmLiteAuthRepository(c.Resolve<IDbConnectionFactory>()));
container.Resolve<IAuthRepository>().InitSchema();
Как правильно мне зарегистрироваться и получить контекст базы данных?