自定义类型 、 自定义转换 、 TypeHandlers

1、自定义类型(升级:5.1.4.68

为什么满足所有业务需求和数据库,SqlSugar提供了自定义类型的使用

  1.1 自带的通用转换

自带的转换考虑到数据安全和性能不支持逆向转换, 例如varchar不能转成datetime等

可以用ORM自带通用转换处理简单类型的强制转换

[SugarColumn(SqlParameterDbType=typeof(CommonPropertyConvert))]//CommonPropertyConvertORM自带的 
public DateTime DcValue { get; set; }//5.1.4.62版本支持

//CommonPropertyConvert 可以F12看他源码重新改一个新类完全可以自定义

 如果想自定义可以F12这个类,按这个类模式写个新的。

1.2自定义类示例

下面只是讲解怎么定义转换器,ORM自带的功能就包含下面功能,只是用来讲解

 //用例1:
 public class DictionaryConvert : ISugarDataConverter
 {
        public SugarParameter ParameterConverter<T>(object value, int i)
        {
            //该功能ORM自带的IsJson就能实现这里只是用这个用例来给大家学习
            var name = "@myp" + i;
            var str = new SerializeService().SerializeObject(value);
            
            //可以更改DbType=System.Data.DbType.XXX
            //PgSql中可以使用:CustomDbType=NpgsqlDbType.XXX;
            return new SugarParameter(name, str);
        }
 
        public T QueryConverter<T>(IDataRecord dr, int i)
        {
            //打断点调试
            //该功能ORM自带的IsJson就能实现这里只是用这个用例来给大家学习
            var str = dr.GetValue(i) + "";
            return new SerializeService().DeserializeObject<T>(str);
             
            //如果不是序列化要转成T如下
            //(T)(object) str
        }
    }

 1.2 使用自定义转换器

 [SugarColumn(ColumnDataType="varchar(2000)",SqlParameterDbType=typeof(DictionaryConvert))]
 public Dictionary<string, object> DcValue { get; set; }//5.1.3.53-preview08


2.现有类型支持

 2.1 json类型

   https://www.donet5.com/Home/Doc?typeId=1232

 2.2  枚举类型

int存储:直接用就行了

 public DbType DcValue { get; set; }

string存储:高版本如下写法

 //如果枚举想存string
 [SugarColumn(ColumnDataType="varchar(20)",SqlParameterDbType=typeof(EnumToStringConvert))]//这个类是ORM自带的  
 public DbType DcValue { get; set; }


3.数据库独有类型支持

看左边菜单 【数据库特性】 该菜单下面有 SqlServer菜单或者MySql菜单等 ,  针对不同数据库都有专门的介绍



关闭
果糖网