小编Bel*_*sis的帖子

使用IUserType的NHibernate linq查询

在我的项目中,我使用一个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)

c# linq nhibernate iusertype

11
推荐指数
1
解决办法
2028
查看次数

标签 统计

c# ×1

iusertype ×1

linq ×1

nhibernate ×1