修复实体中属性为枚举值且继承自Int64时,值超过Int32.MaxValue时,不能入库的问题。

This commit is contained in:
daijianping 2025-02-17 15:52:08 +08:00
parent ab2966ec25
commit d033ed253d
4 changed files with 43 additions and 4 deletions

View File

@ -416,7 +416,21 @@ public class ClassBuilder
// 特殊支持枚举
var type2 = type.GetTypeEx();
if (type2 != null && type2.IsEnum)
WriteLine("case \"{0}\": {0} = ({1})value.ToInt(); break;", column.Name, type);
{
var enumType = Enum.GetUnderlyingType(type2);
switch (enumType.Name)
{
case "Int32":
WriteLine("case \"{0}\": {0} = ({1})value.ToInt(); break;", column.Name, type);
break;
case "Int64":
WriteLine("case \"{0}\": {0} = ({1})value.ToLong(); break;", column.Name, type);
break;
default:
WriteLine("case \"{0}\": {0} = ({1})value.ToInt(); break;", column.Name, type);
break;
}
}
else
WriteLine("case \"{0}\": {0} = ({1})value; break;", column.Name, type);
}

View File

@ -821,7 +821,17 @@ public class EntityBuilder : ClassBuilder
}
// 特殊支持枚举
else if (column.DataType != null && column.DataType.IsInt())
WriteLine("case \"{0}\": _{0} = ({1})value.ToInt(); break;", column.Name, type);
{
switch (column.DataType.Name)
{
case "Int64":
WriteLine("case \"{0}\": _{0} = ({1})value.ToLong(); break;", column.Name, type);
break;
default:
WriteLine("case \"{0}\": _{0} = ({1})value.ToInt(); break;", column.Name, type);
break;
}
}
else
{
var method = "To";

View File

@ -858,7 +858,10 @@ abstract class DbBase : DisposeBase, IDatabase
if (value == null) return isNullable ? "null" : "";
// 枚举
if (type != null && type.IsEnum) type = typeof(Int32);
if (type != null && type.IsEnum)
{
type = Enum.GetUnderlyingType(type);
}
// 转为目标类型,比如枚举转为数字
if (type != null) value = value.ChangeType(type);

View File

@ -414,7 +414,19 @@ partial class DbMetaData
if (isArrayField) type = type.GetElementType();
// 处理枚举
if (type.IsEnum) type = typeof(Int32);
if (type.IsEnum)
{
var trueType = Enum.GetUnderlyingType(type);
switch (trueType.Name)
{
case "Int64":
type = typeof(long);
break;
default:
type = typeof(Int32);
break;
}
}
if (!Types.TryGetValue(type, out var ns)) return null;