Tôi đang thử nghiệm với PetaPoco để chuyển đổi bảng thành POCO.PetaPoco có xử lý enums không?
Trong bảng của tôi, tôi có một cột có tên là TheEnum
. Các giá trị trong cột này là chuỗi đại diện cho enum sau:
public enum MyEnum
{
Fred,
Wilma
}
PetaPoco nghẹn khi nó cố gắng để chuyển đổi chuỗi "Fred" thành một giá trị MyEnum
.
Nó làm điều này trong phương pháp GetConverter
, trong dòng:
Convert.ChangeType(src, dstType, null);
Ở đây, src
là "Fred" (một string
), và dstType
là typeof(MyEnum)
.
Trường hợp ngoại lệ là một InvalidCastException
, nói Invalid cast from 'System.String' to 'MyEnum'
Tôi có thiếu cái gì? Có điều gì tôi cần phải đăng ký trước?
Tôi đã có xung quanh vấn đề bằng cách thêm đoạn mã sau vào phương pháp GetConverter
:
if (dstType.IsEnum && srcType == typeof(string))
{
converter = delegate(object src)
{
return Enum.Parse(dstType, (string)src) ;
} ;
}
Rõ ràng, tôi không muốn chạy delegate này trên mỗi hàng vì nó sẽ làm chậm điều xuống rất nhiều. Tôi có thể đăng ký enum này và các giá trị của nó vào một từ điển để tăng tốc mọi thứ, nhưng có vẻ như với tôi rằng một cái gì đó như thế này có thể đã có trong sản phẩm.
Vì vậy, câu hỏi của tôi là, tôi có cần phải làm bất cứ điều gì đặc biệt để đăng ký enums của tôi với PetaPoco không?
Cập nhật ngày 23 Tháng Hai 2012
tôi submitted a patch một thời gian trước, nhưng nó đã không được kéo vào được nêu ra. Nếu bạn muốn sử dụng nó, hãy xem bản vá và nhập vào mã của riêng bạn hoặc chỉ nhận mã from here.
** Cập nhật ngày 28 tháng 6 năm 2012 ** bản vá chính xác vẫn chưa được áp dụng nhưng mã tương tự đã được thêm vào [chi nhánh v5] (https://github.com/toptensoftware/PetaPoco/tree/v5). Xem thêm http://www.toptensoftware.com/Articles/137/Long-Time-No-Post-and-PetaPoco-v5 –
Nếu nó không phải là khó khăn cho bạn, xin gửi bản vá cho npoco quá. Tôi khuyên bạn nên chuyển sang npoco, vì nó có sự phát triển tích cực hơn và có tất cả các tính năng mà PetaPoco có và thậm chí nhiều hơn nữa. – AuthorProxy
** Cập nhật ngày 9 tháng 9 năm 2014 ** @iano answer là phiên bản chính xác cho phiên bản ** 5.0.2 ** mới nhất. –