【问题标题】:Using Npgsql ADO Entity Framework with jsonb将 Npgsql ADO 实体框架与 jsonb 一起使用
【发布时间】:2021-07-09 12:58:18
【问题描述】:

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

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

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

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

本页Supported Types and their Mappings建议默认支持jsonb。

我错过了什么吗?

【问题讨论】:

    标签: c# .net postgresql entity-framework-6


    【解决方案1】:

    当你直接拉取为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\"}"
          }
    
    
      }
      }
    

    【讨论】:

    • 你是不是建议不要使用EntityFramework6?但是老派写长手 SQL 并创建自定义类来保存对象?我想避免这种情况,因为它需要更多的编码,尤其是处理各种数据类型、NULL 和避免 SQL 注入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2014-09-23
    • 2016-03-09
    相关资源
    最近更新 更多