Skip to content

【BUG】JsonMap 新老版本部分特性不兼容 #2224

@sevenTiny

Description

@sevenTiny

问题描述及重现代码:

版本升级后,之前运行完好的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标记的字段,就会抛出转换异常,似乎是新版本的改动没有兼容到选择属性这里。

Image
// 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions