在我的项目中,我使用一个IUserType(BooleanM1)来处理布尔值,并将-1写入true,将0表示false值写入数据库.到目前为止一切运作良好.映射看起来像这样:
<property name="Active" column="ACTIVE" type="Core.Persistence.NH.Types.BooleanM1,Core.Test"/>
Run Code Online (Sandbox Code Playgroud)
所以,如果我进行如下查询
var pList = Session.Query<Test>().Where( c => c.Active ).ToList();
Run Code Online (Sandbox Code Playgroud)
抛出异常:
NHibernate.QueryException: Unable to render boolean literal value [.Where[Core.Test.Domain.Test]
(NHibernate.Linq.NhQueryable`1[Core.Test.Domain.Test], Quote((c, ) => (c.Active)), )]
---> System.InvalidCastException: Das Objekt des Typs "NHibernate.Type.CustomType" kann nicht
in Typ "NHibernate.Type.BooleanType" umgewandelt werden.
Run Code Online (Sandbox Code Playgroud)
BooleanM1实现是这样的:
{
public class BooleanM1 : IUserType
{
public bool IsMutable
{
get { return false; }
}
public Type ReturnedType
{
get { return typeof(bool); }
}
public SqlType[] SqlTypes
{
get { return new[]{NHibernateUtil.Int16.SqlType}; } …Run Code Online (Sandbox Code Playgroud)