FreeSql
FreeSql copied to clipboard
在使用JsonMap特性时,无法从数据库读取出数据
问题描述及重现代码:
背景:我有一个A类,和A1类,A1类重写了tostring\equals\gethashCode作为值对象类型 在A类中有个字段,类型为List<A1>,并标注了特性[JsonMap]。 通过文档 https://freesql.net/guide/type-mapping.html 尝试对A1 CURD 我做了如下尝试
- 数据库类型为 jsonb, C#字段不标注[Column(DbType="jsonb")] 结果无法添加
- 数据库类型为 jsonb,C#字段标注[Column(DbType="jsonb")] 结果无法添加
- 数据库类型为jsonb[], C#字段不标注dbtype 结果无法添加
- 数据库类型为text,C#字段标注[Column(MapType = typeof(string))] 可以正常添加 参考了issue dotnetcore/FreeSql/issues/2060 最终代码类似如下:
// c# code
public class A
{
[Column(MapType=typeof(string))]
[JsonMap]
public List<A1> A1s{get; private set;}
}
public class A1
{
public ulong Id {get; private set;}
public int Num {get; private set;}
}
测试数据:仓储模式下 插入一条A并插入两条A1。 目前问题是: 在仓储模式下可以正常添加,select时获取到的数据A中 A1s为两条但是id和num均为0,与数据库数据不一致
数据库版本
pgsql V16.4
安装的Nuget包
FreeSql.Provider.PostgreSQL v3.5.212
.net framework/. net core? 及具体版本
.net 8
可能是因为private的原因
确实,经过测试,将A1中 private set 改为 set后,可以正确获取到数据库中的值,可是在A中不是只有这一个字段,其他字段也都是private set,同样可以从数据库中获取到数据。我认为可能是内置的JsonMap转换类只处理了public set
这个要看 JsonSetting,UseJsonMap 是不是有个参数?