Использование .NET Core 2.1, NPGSQL, Entity Framework и Linux.
Из функции конфигурации Startups.cs я вызываю функцию в классе с внедрением зависимостей, который, в свою очередь, вызывает другой класс с внедрением зависимостей, который обращается кБД с использованием Entity Framework + NPGSQL.
Настройка служб:
public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFrameworkNpgsql()
.AddDbContext<MMContext>(options => options.UseNpgsql($"Host='localhost'; Port=1234;Database='mydb';Username='test';Password='test'"))
.BuildServiceProvider();
services.AddTransient<IMusicManager, MusicManager>();
services.AddTransient<IMusicRepo, MusicRepo>();
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
Настройка функции:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc();
using (var scope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
var mm = scope.ServiceProvider.GetRequiredService<IMusicManager>();
mm.DoSomeDBStartupStuff();
}
}
IMusicManager
Реализация выглядит следующим образом:
private readonly IMusicRepo _musicStoreRepo;
public MusicManager(IMusicRepo musicStoreRep)
{
_musicStoreRepo = musicStoreRepo;
}
public void DoSomeDBStartupStuff()
{
_musicStoreRepo.InsertSampleStuff();
_musicStoreRepo.CheckThisAndCheckThat();
}
IMusicRepo
Реализация выглядит следующим образом:
private readonly MMContext _context;
public MusicRepo(MMContext context)
{
_context = context;
}
public void InsertSampleStuff()
{
_context.Music.AddAsync(new music("abc"));
_context.Music.AddAsync(new music("123"));
_context.SaveChangesAsync();
}
MMContext
Это реализовано так:
public class MMContext : DbContext
{
public MMContext(DbContextOptions<MMContext> options) : base(options) {}
... OnModelCreating etc...
}
Я получаю это исключение при запуске:
Исключение при запуске приложения: System.InvalidOperationException: Reset () вызывается для соединителя с состоянием Выполняется в Npgsql.NpgsqlConnector.Reset () в Npgsql.ConnectorPool.Release (соединитель NpgsqlConnector) в Npgsql.NpgsqlConnection.Close (Boolean waspggs)Dispose (BoolНапример, в System.ComponentModel.Component.Dispose () в Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Dispose () в Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.Dispose () в Microsoft.EteteDespose.Microsoft.Extensions.DependencyInjection.ServiceLookup.- в Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure (приложение IApplicationBuilder) в Microsoft.AspNetCore.HostFilteringStartupFilter. <> c__DisplayClass0_0.b__0 (приложение IApplicationBuilder) в Microsoft.AspNetCore.play_0) в Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication ()
Я не уверен, что является причиной проблемы.Возможно, как я использую Dependency Injection и как я использую прицел?Помощь оценена.