using SqlSugar; using SqlSugar.DbConvert; using SqlSugar.Extensions; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace OrmTest { internal class UinitCustomConvert { public static void Init() { var db = NewUnitTest.Db; db.DbMaintenance.CreateDatabase(); db.CodeFirst.InitTables(); db.DbMaintenance.TruncateTable(); var id=db.Insertable(new Uinitadfa22122() { DcValue = new Dictionary() { { "1", 1 } } } ).ExecuteReturnIdentity(); var data = db.Queryable().ToList(); if (data.First().EnumValue != null) { throw new Exception("unit error"); } if (data.First().DcValue["1"].ObjToInt() != 1) { throw new Exception("unit error"); } db.Updateable(new Uinitadfa22122() { Id = id, DcValue = new Dictionary() { { "1", 2 } }, EnumValue = SqlSugar.DbType.MySql } ).ExecuteCommand(); data = db.Queryable().Where(it => it.EnumValue == SqlSugar.DbType.MySql).ToList(); var data2 = db.Queryable().Where(it => SqlSugar.DbType.MySql == it.EnumValue).ToList(); if (data.First().EnumValue != SqlSugar.DbType.MySql) { throw new Exception("unit error"); } if (data.First().DcValue["1"].ObjToInt() != 2) { throw new Exception("unit error"); } var dt = db.Queryable().ToDataTable(); if (dt.Columns["EnumValue"].DataType != typeof(string)) { throw new Exception("unit error"); } if (data2.First().EnumValue != data.First().EnumValue) { throw new Exception("unit error"); } } } public class Uinitadfa22122 { [SugarColumn(IsIdentity = true, IsPrimaryKey = true)] public int Id { get; set; } [SqlSugar.SugarColumn(ColumnDataType = "varchar(1000)", SqlParameterDbType = typeof(DictionaryConvert), IsNullable = true)] public Dictionary DcValue { get; set; } [SqlSugar.SugarColumn(ColumnDataType = "varchar(20)", SqlParameterDbType = typeof(EnumToStringConvert), IsNullable = true)] public SqlSugar.DbType? EnumValue { get; set; } } public class DictionaryConvert : ISugarDataConverter { public SugarParameter ParameterConverter(object value, int i) { var name = "@myp" + i; var str = new SerializeService().SerializeObject(value); return new SugarParameter(name, str); } public T QueryConverter(IDataRecord dr, int i) { var str = dr.GetValue(i) + ""; return new SerializeService().DeserializeObject(str); } } }