我SqlBulkCopy
用来将一些数据插入到表中。我的数据对象有一个枚举属性。我想将其保存为值 (G),而不是 int (1)。
在我调用dataTable.Load()
时,属性从“G”变为 1。显然这就是发生的情况?
https://github.com/npgsql/npgsql/issues/1220
有办法解决吗?我最初认为这可能是 FastMember (Marc Gravell) 的问题ObjectReader
,但reader
仍然具有“G”的值,所以这就是DataTable
问题.Load()
所在。
如何将枚举保存为字符串而不是 int?
private static DataTable ToDataTable<T>(IEnumerable<T> data, List<string> columnNames)
{
string assemblyQualifiedName = typeof(AccrualHistory).AssemblyQualifiedName;
Type accrualHistoryType = Type.GetType(assemblyQualifiedName);
List<string> memberInfos = accrualHistoryType.GetMembers().Select(x => x.Name).ToList();
// Only include properties that are *also* columns in the table.
IEnumerable<string> propertiesThatAlsoExistInTable =
memberInfos.Intersect(columnNames, StringComparer.OrdinalIgnoreCase);
var dataTable = new DataTable();
using (var reader = new ObjectReader(typeof(T), data, propertiesThatAlsoExistInTable.ToArray()))
{
// This is where the enum goes from 'G' to 1.
dataTable.Load(reader);
}
return dataTable;
}
我可以尝试一些后备选项:
- 不使用
SqlBulkCopy
- 创建一个新类并将原始类映射到它,其中新类具有作为字符串的枚举属性。然后用新的类保存?
这是枚举:
public enum FrequencyType
{
A,
G
}
这是我要保存的对象的属性:
public FrequencyType FrequencyType { get; set; }