我正在学习ef内核,并将其与PostresSQL一起使用。我的项目具有以下版本的软件包:
Npgsql.EntityFrameworkCore.PostgreSQL 2.2.4
Microsoft.EntityFrameworkCore 2.2.6
上下文代码:
using Shared;
using Shared.Gameplay.Organizations;
using Microsoft.EntityFrameworkCore;
namespace Server
{
public class ApplicationContext : DbContext
{
private static ApplicationContext _context;
public static ApplicationContext Instance
{
get
{
if (_context == null)
_context = new ApplicationContext();
return _context;
}
}
public DbSet<User> Users { get; set; }
public DbSet<VehicleState> Vehicles { get; set; }
public DbSet<OrganizationBase> Organizations { get; set; }
public ApplicationContext()
{
Database.EnsureDeleted();
Database.EnsureCreated();
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<IPenalty>()
.ToTable("Penalties")
.HasDiscriminator<int>("PenaltyType")
.HasValue<WarnPenalty>(1)
.HasValue<BanPenalty>(2);
modelBuilder.Entity<User>()
.HasMany(x => x.Penalties)
.WithOne(p => p.Player);
modelBuilder.Entity<OrganizationBase>().Ignore(o => o.Actions);
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql("Host=localhost;Port=5432;Database=usersdb;Username=postgres;Password=root", options =>
{
options.UseAdminDatabase("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()
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)
,但是毕竟所有操作似乎都能成功完成,并且在DB中创建了对象。 为什么会发生这种情况以及如何解决?