From ec918466bc8ae0e5c092cf996fa082a055c07f57 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 20 Apr 2024 16:43:35 +0800 Subject: [PATCH] Update questdb bulkcopy --- .../CsvHelperEnumToIntConverter.cs | 34 +++++++++++++++++++ .../QuestDbRestAPI.cs | 10 ++++-- 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 Src/Asp.NetCore2/SqlSugar.QuestDb.RestApi/CsvHelperEnumToIntConverter.cs diff --git a/Src/Asp.NetCore2/SqlSugar.QuestDb.RestApi/CsvHelperEnumToIntConverter.cs b/Src/Asp.NetCore2/SqlSugar.QuestDb.RestApi/CsvHelperEnumToIntConverter.cs new file mode 100644 index 000000000..c632eb691 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSugar.QuestDb.RestApi/CsvHelperEnumToIntConverter.cs @@ -0,0 +1,34 @@ +using CsvHelper.Configuration; +using CsvHelper.TypeConversion; +using CsvHelper; +using System; +using System.Collections.Generic; +using System.Text; + +namespace SqlSugar +{ + public class CsvHelperEnumToIntConverter : ITypeConverter + { + public string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData) + { + if (value == null) + { + return "null"; + } + else if (value is Enum enumValue) + { + return (Convert.ToInt32(enumValue)).ToString(); + } + throw new NotSupportedException(); + } + + public object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData) + { + if (int.TryParse(text, out int intValue)) + { + return text; + } + throw new NotSupportedException(); + } + } +} diff --git a/Src/Asp.NetCore2/SqlSugar.QuestDb.RestApi/QuestDbRestAPI.cs b/Src/Asp.NetCore2/SqlSugar.QuestDb.RestApi/QuestDbRestAPI.cs index c997d86bd..98473deb5 100644 --- a/Src/Asp.NetCore2/SqlSugar.QuestDb.RestApi/QuestDbRestAPI.cs +++ b/Src/Asp.NetCore2/SqlSugar.QuestDb.RestApi/QuestDbRestAPI.cs @@ -197,12 +197,18 @@ namespace SqlSugar private void CsvCreating(CsvWriter csv) where T : class, new() { var entityColumns = db.EntityMaintenance.GetEntityInfo().Columns; - if (entityColumns.Any(it => it.IsIgnore)) + if (entityColumns.Any(it => it.IsIgnore||it.UnderType?.IsEnum==true)) { var customMap = new DefaultClassMap(); foreach (var item in entityColumns.Where(it => !it.IsIgnore)) { - customMap.Map(typeof(T), item.PropertyInfo).Name(item.PropertyName); + var memberMap = customMap.Map(typeof(T), item.PropertyInfo).Name(item.PropertyName); + if (item.UnderType?.IsEnum==true + &&item.SqlParameterDbType==null + &&db.CurrentConnectionConfig?.MoreSettings?.TableEnumIsString!=true) + { + memberMap.TypeConverter(); + } } csv.Context.RegisterClassMap(customMap); }