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>();