0

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; }
4

0 回答 0