C# DBContext初始化抛出SocketException
我正在学习ef core并将其与PostresSQL一起使用。我的项目有以下版本的软件包: Npgsql.EntityFrameworkCore.PostgreSQL 2.2.4C# 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
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)