C# Fluent NHibernate(ASP.NET MVC)中的枚举类型不匹配

C# Fluent NHibernate(ASP.NET MVC)中的枚举类型不匹配,c#,asp.net-mvc-3,nhibernate,fluent-nhibernate,C#,Asp.net Mvc 3,Nhibernate,Fluent Nhibernate,表格型号: public class UserOwnerShip { public virtual int Id { get; set; } public virtual User User { get; set; } public virtual City City { get; set; } public virtual Company Company { get; set; } public virtual UserRole UserRole { g

表格型号:

public class UserOwnerShip
{
    public virtual int Id { get; set; }
    public virtual User User { get; set; }
    public virtual City City { get; set; }
    public virtual Company Company { get; set; }
    public virtual UserRole UserRole { get; set; }
    public virtual DateTime RegistryDate { get; set; }
    public virtual bool IsActive { get; set; }
}
映射:

internal class UserOwnerShipMap : ClassMap<UserOwnerShip>
{
    public UserOwnerShipMap()
    {
        Id(x => x.Id);
        Map(x => x.IsActive);
        Map(x => x.UserRole).CustomType(typeof(int));
        Map(x => x.RegistryDate);

        References(x => x.User).Not.Nullable();
        References(x => x.City).Nullable();
        References(x => x.Company).Nullable();
    }
}
以及我的nhibernate配置部分:

....().Conventions.AddFromAssemblyOf<EnumConvention>())

如果要存储枚举的int值,映射简单:

Map(x => x.UserRole).CustomType<UserRole>();
Map(x=>x.UserRole).CustomType();

没有必要使用EnumConvention。

这比你想象的容易,但无法弥补困难,所以请享受这一次。
....().Conventions.AddFromAssemblyOf<EnumConvention>())
    IList<UserOwnerShip> userOwnerShip = session.QueryOver<UserOwnerShip>()
                                                    .Where(u => u.UserRole == UserRole.Owner)
                                                    .Where(u => u.IsActive)
                                                    .List<UserOwnerShip>();
Type mismatch in NHibernate.Criterion.SimpleExpression: UserRole expected type System.Int32, actual type XXX.XXX.UserRole (which is enum type class)
Map(x => x.UserRole).CustomType<UserRole>();