【问题标题】:PostgreSQL and Blazor .Net Core 3.1PostgreSQL 和 Blazor .Net Core 3.1
【发布时间】:2020-04-10 04:23:56
【问题描述】:

是否有关于如何使用当前版本的 Blazor (3.1) 和 PostgreSQL 的资源?

我尝试编写最简单的代码,只是为了查看它是否连接到数据库,但我收到此错误消息:System.Net.Dns:GetHostByName is not supported on this platform

单击按钮将激活此代码:

async void connection()
{
  var connString = "Host=Server1;Username=postgres;Password=pass;Database=BlazorData";

  try
  {
    await using var conn = new NpgsqlConnection(connString);
    await conn.OpenAsync();
    errcheck = "success";
  }
  catch (Exception ex)
  {
     errcheck = ex.Message;
  }
}

【问题讨论】:

    标签: npgsql blazor


    【解决方案1】:

    我解释了我如何将它与实体框架一起使用。它可能会帮助你。 在startup.cs中,ConfigureServices方法有这个

    services.AddEntityFrameworkNpgsql().AddDbContext<ApplicationDbContext>(options =>
                    options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));
    

    你需要通过nuget安装两个包

    Npgsql.EntityFrameworkCore.PostgreSQL
    
    Npgsql.EntityFrameworkCore.PostgreSQL.Design
    

    在 appsetting.json 中确保你正确设置了连接字符串,下面是我的。如果数据库与数据库在同一台机器上,则主机可以是 localhost

    "DefaultConnection": "Host=192.168.16.240;Port=5432;Username=postgres;Password=mypassword;Database=mydatabase;"
    

    基本上就是这样。

    然后使用您的表定义应用程序数据库上下文

     public class ApplicationDbContext : DbContext
        {
            public ApplicationDbContext(DbContextOptions options) : base(options)
            {
            }
    
            public DbSet<Room> Rooms { get; set; }
            public DbSet<Meal> Meals { get; set; }
    
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
    
            }
        }
    

    在包管理器控制台中

    add-migration initial
    update-database
    

    您应该会看到在 PgAdmin 中创建的表。

    并像通常的 c# 列表一样使用您的数据库集。并记得在你需要的控制器中注入 applicationdbcontext。

    【讨论】:

      【解决方案2】:

      错误提示您需要自己解析主机名。传递 IP 地址或使用Dns.GetHostEntry

      using System.Linq;
      using System.Net;
      using System.Net.Sockets;
      ...
      async void connection()
      {
        var host = Dns.GetHostEntry("Server1");
        var firstIpV4Address = host.AddressList.First(a => a.AddressFamily == AddressFamily.InterNetwork);
        var connString = $"Host={firstIpV4Address};Username=postgres;Password=pass;Database=BlazorData";
      
        try
        {
          await using var conn = new NpgsqlConnection(connString);
          await conn.OpenAsync();
          errcheck = "success";
        }
        catch (Exception ex)
        {
           errcheck = ex.Message;
        }
      }
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-04
        • 2020-02-27
        • 1970-01-01
        • 2020-08-18
        • 2022-06-30
        • 1970-01-01
        • 2020-04-17
        • 1970-01-01
        相关资源
        最近更新 更多