微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 Npgsql ADO 实体框架与 jsonb 一起使用

如何解决将 Npgsql ADO 实体框架与 jsonb 一起使用

我的测试数据库是基于这个

create table test 
(
    id int primary key,b text,i int,name_1 text,name_2 text,alt_names jsonb
);

我通过 nuget 添加EntityFramework6.Npgsql,看起来它包含了一些依赖项

Installed Nuget

当我首先使用数据库构建数据模型时,我可以看到除 alt_names jsonb 列之外的每一列。

页面 Supported Types and their Mappings 表明支持 jsonb。

我错过了什么吗?

解决方法

当你直接拉取为 jsonb 时,它可能无法如愿获得,或者它可能会作为错误返回。另外,如果我是你,我会先创建视图。如果你有问题,你可以改变nuget。 Postgresql 代码:

create or replace view public.testview 
as select
t.id,t.b,t.i,t.name_1,t.name_2,json_build_object('alt_names',t.alt_names) as alt_names
from test t;

c# 代码:

  using Npgsql;
  using System;
  using System.Collections.Generic;
  using System.Net.Http;
  using System.Net.Http.Headers;
  using System.Threading.Tasks;
  namespace ConsoleApp1
  {
  class Program
  {
      static void Main(string[] args)
      {
          
          var cs = "Host=localhost;Username=postgres;Password=123456;Database=postgres";

          using var con = new NpgsqlConnection(cs);
          con.Open();

          var sql = "select * from public.testview";

          using var cmd = new NpgsqlCommand(sql,con);
          NpgsqlDataReader dr = cmd.ExecuteReader();
          List<object> list = new List<object>();
          var i = 0;
          while (dr.Read())
          {
              while (i<dr.FieldCount)
              {
                  list.Add(dr[i]);
                  i++;
              }               
          }
          Console.WriteLine(list[5].ToString());
          //"{\"alt_names\" : \"test\"}"
      }


  }
  }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。