JsonMap失效
问题描述及重现代码:
文档代码https://freesql.net/guide/type-mapping.html#json
fsql.UseJsonMap();
class Table
{
public int Id { get; set; }
[JsonMap]
public TableOptions Options { get; set; }
}
class TableOptions
{
public int Value1 { get; set; }
public string Value2 { get; set; }
}
fsql.Select<Table>().Where(a => a.Options.Value1 == 100 && a.Options.Value2 == "xx").ToList();
异常:
Unhandled exception. System.Exception: FreeSql: Unable to parse expression: a.Options.Value1
at FreeSql.Internal.CommonExpression.ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
at FreeSql.Internal.CommonExpression.ExpressionBinary(String oper, Expression leftExp, Expression rightExp, ExpTSC tsc)
at FreeSql.Internal.CommonExpression.ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
at FreeSql.Internal.CommonExpression.ExpressionWhereLambda(List`1 _tables, Func`3 _tableRule, Expression exp, BaseDiyMemberExpression diymemexp, List`1 whereGlobalFilter, List`1 dbParams)
at FreeSql.Internal.CommonProvider.Select0Provider`2.InternalWhere(Expression exp)
at FreeSql.Internal.CommonProvider.Select1Provider`1.WhereIf(Boolean condition, Expression`1 exp)
at FreeSql.Internal.CommonProvider.Select1Provider`1.Where(Expression`1 exp)
数据库版本
PostgreSQL 15.2, compiled by Visual C++ build 1914, 64-bit
安装的Nuget包
FreeSql.All 3.5.209 FreeSql.Extensions.JsonMap 3.5.209
.net framework/. net core? 及具体版本
.NET 9.0.301
@2881099 我今天正好也碰到了 确实有这个问题
最近天气太热了,晚上看。
忘记 3.5.100 为啥去掉了 pgsql 几个数据库的 case 判断。已经恢复了,晚上发布新版本。
忘记 3.5.100 为啥去掉了 pgsql 几个数据库的 case 判断。已经恢复了,晚上发布新版本。
class Table
{
public int Id { get; set; }
[JsonMap, Column(DbType = "jsonb")]
public TableOptions Options { get; set; }
}
class TableOptions
{
public int Value1 { get; set; }
public string Value2 { get; set; }
}
设置 Column(DbType = "jsonb")无效是否也一起恢复了
DbType = "jsonb" 无效是什么意思?
DbType = "jsonb" 无效是什么意思?
数据库里面的类型变成text了,而不是jsonb
pgsql 不再需要指定 DbType 了,之后一起发版
pgsql 不再需要指定 DbType 了,之后一起发版
class Table
{
public int Id { get; set; }
[JsonMap]
public List<TableOptions> Options { get; set; }
[JsonMap]
public TableOptions Option { get; set; }
}
class TableOptions
{
public int Value1 { get; set; }
public string Value2 { get; set; }
}
当类型为集合的时候,会导致数据插入报错,这里交给用户指定会不会好一点
[JsonMap, Column(MapType =typeof(JArray))]或者[JsonMap, Column(DbType = "jsonb")]
现在更新SDK后会出现风险,会改变原有的字段类型,原来字段类型还是映射为text. 现在自动映射成了jsonb
@2881099 上面的情况不知道大佬是否有核实.
所以我之前在文档用 DbType = jsonb,可以自己指定。
如果不想改变这段类型,可以指定 MapType=string, StringLength=-1
所以我之前在文档用 DbType = jsonb,可以自己指定。
如果不想改变这段类型,可以指定 MapType=string, StringLength=-1
现在这样指定DbType = jsonb时,当类型为集合的时候,添加数据的时候会导致报错
必须[JsonMap, Column(MapType =typeof(JArray))]这样指定才行 @2881099