Skip to content

枚举有时不能正确转换成int #2235

@bookser

Description

@bookser

问题描述及重现代码:

Expression<Func<SalesPersonOrderVo, bool>> expression = x => x.Status == SalesOrderStatusEnum.Complete;
var repository = freeSql.GetRepository<SalesPersonOrderVo>();
await repository.Select.Where(expression).ToListAsync();

SalesOrderStatusEnum.Complete有时编译后偶尔会识别为'Complete',不能转换为int,大多数情况下编译后是正常的,偶尔不正常变成'Complete'字符串;
导致发布后,员工添加数据有时不正常,查询不到数据,因为没有任何征兆;
一次本地调试后看打印出来的SQL,复制到Navicat运行才看清是枚举字符串问题,发现是枚举没正确转换成int,但查代码无异常;
未做任何改动,重新编译一次则正常,我找不到问题根源,已经发生多次,问deepseek,怀疑是缓存,但无法给出正确的处理方法。

 fsql.Aop.ConfigEntityProperty += (s, e) =>
 {
     if (e.Property.PropertyType.IsEnum)
         e.ModifyResult.MapType = typeof(int);
 };
    public class SalesPersonOrderVo 
    {
        /// <summary>
        /// 订单状态
        /// </summary>
        public SalesOrderStatusEnum Status { get; set; }
        /// <summary>
        /// 最终销售产品
        /// </summary>
        [JsonMap]
        public IEnumerable<SalesOrderGoodsItemBo> SalesProducts { get; set; }
    }

数据库版本

Mysql 8.4.8

安装的Nuget包

FreeSql 3.5.309
FreeSql.Extensions.JsonMap 3.5.309
FreeSql.Provider.MySqlConnector 3.5.309
FreeSql.Repository 3.5.309
IdleBus 1.5.3
MySqlConnector 2.5.0

.net framework/. net core? 及具体版本

.net 10.0.7

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