为什么满足所有业务需求和数据库,SqlSugar提供了自定义类型的使用
自带的转换考虑到数据安全和性能不支持逆向转换, 例如varchar不能转成datetime等
可以用ORM自带通用转换处理简单类型的强制转换
1 2 3 4 | [SugarColumn(SqlParameterDbType= typeof (CommonPropertyConvert))] //CommonPropertyConvertORM自带的 public DateTime DcValue { get ; set ; } //5.1.4.62版本支持 //CommonPropertyConvert 可以F12看他源码重新改一个新类完全可以自定义 |
如果想自定义可以F12这个类,按这个类模式写个新的。
下面只是讲解怎么定义转换器,ORM自带的功能就包含下面功能,只是用来讲解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | //用例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 |
需要使用 NoParameterCommonPropertyConvert
当然也可以重写 NoParameterCommonPropertyConvert
1 2 3 4 | SqlParameterDbType= typeof (NoParameterCommonPropertyConvert ) //需要较高版本sqlsugar //NoParameterCommonPropertyConvert可以在下面贴子有进行讨论用法 //https://www.donet5.com/ask/9/31600 |
https://www.donet5.com/Home/Doc?typeId=1232
int存储:直接用就行了
1 | public DbType DcValue { get ; set ; } |
string存储:高版本如下写法
1 2 3 | //如果枚举想存string [SugarColumn(ColumnDataType= "varchar(20)" ,SqlParameterDbType= typeof (EnumToStringConvert))] //这个类是ORM自带的 public DbType DcValue { get ; set ; } |
看左边菜单 【数据库特性】 该菜单下面有 SqlServer菜单或者MySql菜单等 , 针对不同数据库都有专门的介绍
2016 © donet5.comApache Licence 2.0