2017-01-10 17 views
5

Tôi đang sử dụng FastMember để chuyển đổi List<T> thành Datatable. Một số lớp chứa enums và điều này gây ra vấn đề khi truyền các datatables dưới dạng TVP sang một thủ tục lưu sẵn.Làm thế nào để chuyển đổi enum thành int tự động qua FastMember?

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 chuyển đổi danh sách, tuy nhiên cột cho enum có DataType của SomeEnum. Khi đi qua các DataTable như một TVP, các ngoại lệ sau đây được ném:

ngoại lệ ném: 'System.ArgumentException' trong Dapper.dll

thông tin bổ sung: Các loại cột 'SomeEnum' không được hỗ trợ. Loại này là 'SomeEnum'

Có cách nào để buộc FastMember chuyển đổi enums thành int không?

+0

tôi đề xuất một danh hiệu chỉnh sửa, bởi vì câu hỏi có vẻ tầm thường và giống như một bản sao của http://stackoverflow.com/q/943398/ 3950370 –

+0

Có thể giống như một cái gì đó không được hỗ trợ trong FastMember: https://github.com/mgravell/fast-member/issues/10 – Michael

+0

Bạn có thể chỉ định loại vấn đề nào sử dụng enums gây ra? –

Trả lời

1

Bạn có thể tạo một loại vô danh đến với các thuộc tính đúng:

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); 
} 
Các vấn đề liên quan