Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DBContext初始化抛出SocketException_C#_Postgresql_.net Core_Npgsql_Ef Core 2.2 - Fatal编程技术网

C# DBContext初始化抛出SocketException

C# DBContext初始化抛出SocketException,c#,postgresql,.net-core,npgsql,ef-core-2.2,C#,Postgresql,.net Core,Npgsql,Ef Core 2.2,我正在学习ef core并将其与PostresSQL一起使用。我的项目有以下版本的软件包: Npgsql.EntityFrameworkCore.PostgreSQL 2.2.4 Microsoft.EntityFrameworkCore 2.2.6 上下文代码: 使用共享; 使用Shared.Gameplay.organization; 使用Microsoft.EntityFrameworkCore; 命名空间服务器 { 公共类应用程序上下文:DbContext { 私有静态应用程序上下文\u

我正在学习ef core并将其与PostresSQL一起使用。我的项目有以下版本的软件包:

Npgsql.EntityFrameworkCore.PostgreSQL 2.2.4
Microsoft.EntityFrameworkCore 2.2.6
上下文代码:

使用共享;
使用Shared.Gameplay.organization;
使用Microsoft.EntityFrameworkCore;
命名空间服务器
{
公共类应用程序上下文:DbContext
{
私有静态应用程序上下文\u上下文;
公共静态ApplicationContext实例
{
得到
{
if(_context==null)
_上下文=新的ApplicationContext();
返回上下文;
}
}
公共数据库集用户{get;set;}
公共数据库集车辆{get;set;}
公共数据库集组织{get;set;}
公共应用程序上下文()
{
数据库。确保已删除();
数据库。请重新创建();
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.ToTable(“罚款”)
.HasDiscriminator(“惩罚类型”)
.HasValue(1)
.HasValue(2);
modelBuilder.Entity()
.HasMany(x=>x.0)
.有一个(p=>p.Player);
modelBuilder.Entity().Ignore(o=>o.Actions);
}
配置时受保护的覆盖无效(DBContextOptions Builder Options Builder)
{
optionsBuilder.UseNpgsql(“主机=本地主机;端口=5432;数据库=用户SDB;用户名=postgres;密码=根目录”,选项=>
{
选项。使用AdminDatabase(“postgres”);
});
}
}
}
以下代码:

var db = ApplicationContext.Instance;
抛出异常:

Npgsql.PostgresException (0x80004005): 3D000: ���� ������ "usersdb" �� ����������
   at void Npgsql.NpgsqlConnector+<>c__DisplayClass161_0+<<ReadMessage>g__ReadMessageLong|0>d.MoveNext() in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 1003
   at void Npgsql.NpgsqlConnector+<>c__DisplayClass161_0+<<ReadMessage>g__ReadMessageLong|0>d.MoveNext() in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 1032
   at async Task Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout, bool async, CancellationToken cancellationToken) in C:\projects\npgsql\src\Npgsql\NpgsqlConnector.cs:line 425
   at void Npgsql.NpgsqlConnection+<>c__DisplayClass32_0+<<Open>g__OpenLong|0>d.MoveNext() in C:\projects\npgsql\src\Npgsql\NpgsqlConnection.cs:line 273
   at void System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
但在所有操作都成功运行并在DB中创建对象之后。
为什么会发生这种情况以及如何修复它?

愚蠢的问题-但是你的数据库正在运行,你能在应用程序之外访问它吗?@MarkDavies是的,我当然能访问。我试过pgAdmin和DBeaver。EnsureDeleted()和EnsureCreated()工作正常。不用担心-朱特想100%确定-哈坎我问你为什么要做
数据库。EnsureDeleted()&
数据库。重新创建()在构造函数中?想知道这是不是搞乱了连接到一个已经准备好的现有数据库删除它,创建另一个数据库,然后当您尝试连接到它时,它实际上是在尝试连接到旧数据库pipe@MarkDavies嗯,我在一个非官方教程中找到了这个代码示例。我认为这对重新创建db很有用,因为在主动开发中,我经常更改模型。我试图检查连接是否在调用ctor时打开。关门了。我还删除了EnsureDeleted方法,但仍然抛出异常。
System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (10035): Операция на незаблокированном сокете не может быть завершена немедленно [::1]:5432
   at void System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
(SocketException: A non-blocking socket operation could not be completed immediately [::1]:5432)