2012-12-14 20 views
5

Tôi cần ánh xạ một enum rỗng trong lớp của mình nhưng tôi nhận được ngoại lệ.Bản đồ NHibernate lưu loát nullable enum

NHibernate.PropertyAccessException: Cast không hợp lệ (kiểm tra ánh xạ của bạn cho các loại thuộc tính không phù hợp); setter của App.Model.Stock ---> System.InvalidCastException: Cast được chỉ định không hợp lệ.

Tôi đã thu hẹp sự cố xuống một thuộc tính cụ thể mà tôi mô tả bên dưới.

Điều này trước đây đã được trả lời here, nhưng giải pháp liên kết đến trang không còn tồn tại.

Đây là mã của tôi, mà tôi đã giảm để chỉ chứa các phần mà tôi quan tâm.

public enum eColor 
{ 
    Red, 
    Blue 
} 

public class Stock 
{ 
    public virtual eColor? Color { get; protected set; } 
} 

Dưới đây là bản đồ của tôi (rút gọn):

public class StockMap : ClassMap<Stock> 
{ 
    Map(x => x.Color).CustomType<int>(); 
} 

Tôi đã thử tất cả những điều sau đây với kết quả tương tự:

Map(x => x.Color).CustomType<int>(); 
Map(x => x.Color).CustomType<int?>(); 
Map(x => x.Color).CustomType<int>().Nullable(); 
Map(x => x.Color).CustomType<int?>().Nullable(); 

này dường như là một lỗi một chặng đường dài thời gian trước và đã có một cách giải quyết. Tôi đang sử dụng Fluent 1.3.0.0 và NHibernate 3.3.1.4000.

Trả lời

8

Bạn nên chỉ định loại enum trong CustomType <T>(), ví dụ: CustomType <eColor>(). Điều này sẽ cung cấp cho bạn số nguyên trong cơ sở dữ liệu.

+0

Có cùng một vấn đề, điều này đã làm việc, cảm ơn bạn! – iamserious