This commit is contained in:
28810
2020-03-31 21:59:51 +08:00
parent d4fd81679d
commit cf1aefe8da
18 changed files with 23 additions and 22 deletions

View File

@ -45,7 +45,7 @@ namespace FreeSql.MySql
{
ret.MySqlDbType = dbtype;
if (ret.MySqlDbType == MySqlDbType.Enum && value != null)
ret.Value = EnumValueToMySql(col, value);
ret.Value = EnumValueToMySql(value);
}
_params?.Add(ret);
return ret;
@ -66,18 +66,19 @@ namespace FreeSql.MySql
{
ret.MySqlDbType = (MySqlDbType)tp.Value;
if (ret.MySqlDbType == MySqlDbType.Enum && value != null)
ret.Value = EnumValueToMySql(null, value);
ret.Value = EnumValueToMySql(value);
}
}
return ret;
});
static ConcurrentDictionary<Type, Dictionary<string, int>> _dicEnumNames = new ConcurrentDictionary<Type, Dictionary<string, int>>();
static long EnumValueToMySql(ColumnInfo col, object value) //mysqlConnector 不支持 enumString 作为参数化传递所以要计算出下标值mysql 下标从 1 开始,并且 c# 设置了枚举元素值会影响下标
static long EnumValueToMySql(object value) //mysqlConnector 不支持 enumString 作为参数化传递所以要计算出下标值mysql 下标从 1 开始,并且 c# 设置了枚举元素值会影响下标
{
if (value == null) return 0;
if (value is Enum == false) return 0;
var names = _dicEnumNames.GetOrAdd(col?.Attribute.MapType ?? value.GetType(), type =>
var valueType = value.GetType().NullableTypeOrThis();
if (valueType.IsEnum == false) return 0;
var names = _dicEnumNames.GetOrAdd(valueType, type =>
{
var dic = new Dictionary<string, int>();
var ns = Enum.GetNames(type);