dotnetcore / dotnetcore/FreeSql

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

Open
#2,224 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C#
Stars
4.4k
Forks
910
PR merge metrics
No merged PRs in 30d

Description

#### 问题描述及重现代码:
版本升级后,之前运行完好的JsonMap自动映射功能报错
FreeSql 3.2.833 升级到 3.5.308
FreeSql.Extensions.JsonMap 3.2.833 升级到 3.5.308

经过对比测试,发现问题出现在 Expression> 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#
// c# code
模型定义(使用JsonMap自动映射数据库字符串类型字段到强类型属性):
class MetaForm{
...
///
/// 自定义属性
///
[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());
```

#### 数据库版本
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

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.