问题描述及重现代码:
版本升级后,之前运行完好的JsonMap自动映射功能报错
FreeSql 3.2.833 升级到 3.5.308
FreeSql.Extensions.JsonMap 3.2.833 升级到 3.5.308
经过对比测试,发现问题出现在 Expression<Func<T1, TReturn>> select 参数上,如果不传这个字段选择参数,则不会报错,如果传递了这个参数则抛出类型转换异常。(之前3.2.833版本没有这个问题)
// 成功
var successQuery = await freeSql.Select().Where(t=>t._id == id).FirstAsync();
// 失败
var exceptionQuery = await freeSql.Select().Where(t => t._id == id).FirstAsync(t=>new MetaForm { Properties = t.Properties});
// 成功
var successQuery1 = await freeSql.Select().Where(t => t._id == id).FirstAsync(t=>new MetaForm { _id= t._id});
只要选择属性涉及到JsonMap标记的字段,就会抛出转换异常,似乎是新版本的改动没有兼容到选择属性这里。
// c# code
模型定义(使用JsonMap自动映射数据库字符串类型字段到强类型属性):
class MetaForm{
...
/// <summary>
/// 自定义属性
/// </summary>
[JsonMap]
[Column(MapType = typeof(string), StringLength = -1)]
public MetaFormProperties Properties { get; set; } = new();
}
public class MetaFormProperties
{
public string XX { get; set; }
//...
}
添加自定义类型注册:
FreeSql.Internal.Utils.TypeHandlers.TryAdd(typeof(MetaFormProperties), new TypeJsonHandler<MetaFormProperties>());
数据库版本
Postgresql 17.5
安装的Nuget包
FreeSql 3.2.833 升级到 3.5.308
FreeSql.Extensions.JsonMap 3.2.833 升级到 3.5.308
.net framework/. net core? 及具体版本
net10.0
问题描述及重现代码:
版本升级后,之前运行完好的JsonMap自动映射功能报错
FreeSql 3.2.833 升级到 3.5.308
FreeSql.Extensions.JsonMap 3.2.833 升级到 3.5.308
经过对比测试,发现问题出现在 Expression<Func<T1, TReturn>> select 参数上,如果不传这个字段选择参数,则不会报错,如果传递了这个参数则抛出类型转换异常。(之前3.2.833版本没有这个问题)
// 成功
var successQuery = await freeSql.Select().Where(t=>t._id == id).FirstAsync();
// 失败
var exceptionQuery = await freeSql.Select().Where(t => t._id == id).FirstAsync(t=>new MetaForm { Properties = t.Properties});
// 成功
var successQuery1 = await freeSql.Select().Where(t => t._id == id).FirstAsync(t=>new MetaForm { _id= t._id});
只要选择属性涉及到JsonMap标记的字段,就会抛出转换异常,似乎是新版本的改动没有兼容到选择属性这里。
数据库版本
Postgresql 17.5
安装的Nuget包
FreeSql 3.2.833 升级到 3.5.308
FreeSql.Extensions.JsonMap 3.2.833 升级到 3.5.308
.net framework/. net core? 及具体版本
net10.0