DBContext初始化引发SocketException

时间:2019-12-13 10:26:24

标签: c# postgresql .net-core npgsql ef-core-2.2

我正在学习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中创建了对象。 为什么会发生这种情况以及如何解决?

0 个答案:

没有答案