У меня есть приложение Winforms .NET C # в VS 2017, использующее Entity Framework 6, Postgres в качестве базы данных и EntityFramework6.Npgsql
в качестве поставщика.
Вот мое app.config
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="myapp.Properties.Settings.mydbConnectionString"
connectionString="Host=localhost;Username=postgres;Password=testdbpass;Database=testdb;Pooling=false;"
providerName="Npgsql" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<entityFramework>
<defaultConnectionFactory
type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
</providers>
</entityFramework>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Npgsql" publicKeyToken="5d8b90d52f46fda7" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
... и вот мой код:
class NpgSqlConfiguration : DbConfiguration
{
public NpgSqlConfiguration()
{
var name = "Npgsql";
SetProviderFactory(providerInvariantName: name, providerFactory: NpgsqlFactory.Instance);
SetProviderServices(providerInvariantName: name, provider: NpgsqlServices.Instance);
SetDefaultConnectionFactory(connectionFactory: new NpgsqlConnectionFactory());
}
}
[DbConfigurationType(typeof(NpgSqlConfiguration))]
public class TestContext : DbContext
{
public TestContext() : base("myapp.Properties.Settings.mydbConnectionString")
{
Database.SetInitializer<TestContext>(new ERPInitializer());
}
public DbSet<User> Users { get; set; }
}
public class ERPInitializer : DropCreateDatabaseAlways<TestContext>
//public class ERPInitializer : DropCreateDatabaseIfModelChanges<ERPContext>
{
protected override void Seed(TestContext context)
{
base.Seed(context);
}
}
public static class DBController
{
public static TestContext ErpContext = new TestContext();
public static void PopulateBaseData()
{
try
{
using (var ctx = new TestContext())
{
if (true)
{
ctx.Users.Add(new User() { UserName = "testuser", Name = "Test", Password = "testpasswd" });
ctx.SaveChanges();
}
}
}
catch (Exception ex)
{
System.Console.WriteLine(ex.ToString());
}
}
}
Когда я нахожусь в режиме разработки и несколько раз запускаю приложение, после нескольких запусков я продолжаю получать исключения при попытке добавитьНовая запись в базе данных.Исключение говорит:
{"55006: к базе данных \" mydb \ "обращаются другие пользователи"}
... и как подробности исключения:
Detail = "Существует еще 1 сеанс с использованием базы данных."
Есть идеи, почему у меня возникают такие проблемы с подключением?