5

我正在使用FastMember将 a 转换List<T>Datatable. 某些类包含枚举,当将数据表作为 TVP 传递给存储过程时,这会导致问题。

public class MyObject
{
    public int Id {get; set;}
    public SomeEnum EnumHere {get; set;}
}

var dt = new DataTable();
using (var reader = ObjectReader.Create(myObjectsList))
{
    dt.Load(reader);
}

db.Execute<ResultObject>("insert_objects", new { dt }, commandType: CommandType.StoredProcedure);

FastMember转换列表,但是枚举的列DataType具有SomeEnum. 将数据表作为 TVP 传递时,会引发以下异常:

抛出异常:Dapper.dll 中的“System.ArgumentException”

附加信息:不支持列“SomeEnum”的类型。类型是“SomeEnum”

有没有办法强制FastMember将枚举转换为 int?

4

1 回答 1

3

您可以使用正确的属性创建匿名类型:

var newObjects = from m in myObjectList
                 select new { m.Id, EnumHere = (int)m.EnumHere };

var dt = new DataTable();
using (var reader = ObjectReader.Create(newObjects))
{
    dt.Load(reader);
}
于 2017-02-04T00:49:49.820 回答