mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	## v1.3.3 #184
This commit is contained in:
		@@ -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);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user