【问题标题】:NHibenate. How to set IType in Projections.Constant?休眠。如何在 Projections.Constant 中设置类型?
【发布时间】:2012-10-29 05:54:28
【问题描述】:

我有一个项目使用 NHibernate 2.1.2.4000 和 .Net OracleClient,连接到旧的 Oracle 8i 生产数据库。 我已经实现了一个 ICriteria,它生成了正确的查询,但是引发了以下内部异常:System.Data.OracleClient.OracleException: ORA-12704: character set mismatch

return Session.
                CreateCriteria<Carrera>().
                SetProjection(Projections.SqlFunction("concat", NHibernateUtil.AnsiString, Projections.Property("Descripcion"), Projections.Constant(s), Projections.Property("Id"))).
                Add(Expression.InsensitiveLike("Descripcion", filter.Trim(), MatchMode.Anywhere)).
                SetMaxResults(cant).
                List<String>();

我的问题是:如何在 Projections.Constant(object, IType) 的参数中声明 IType AnsiString?我认为这可能会解决问题。我已经测试过删除 Projections.Constant(),一切正常。

生成的查询示例:

    select
    * 
from
    ( SELECT
        (this_.CARR_DESCRIPCION||:p0||this_.CARR_CODIGO) as y0_ 
    FROM
        CARRERAS this_ 
    WHERE
        lower(this_.CARR_DESCRIPCION) like :p1 ) 
where
    rownum <=:p2;
:p0 = ', código: ', :p1 = '%2451%', :p2 = 20

提前致谢。

【问题讨论】:

    标签: nhibernate icriteria ansistring


    【解决方案1】:

    Projections.Constant(s, NHibernateUtil.AnsiString) 可能吗?

    【讨论】:

    • 首先,很抱歉回复晚了。我试过这个但没有用。最终可行的棘手解决方案是插入一个数字常量 -999),然后在结果中将每个匹配的数字替换为所需的字符串(“,código:”)。
    • 返回会话。创建标准()。 SetProjection(Projections.SqlFunction("concat", NHibernateUtil.String, Projections.Property("Descriptcion"), Projections.Constant(-999), Projections.Property("Id")))。添加(Expression.InsensitiveLike(“描述”,filter.Trim(),MatchMode.Anywhere))。 SetMaxResults(不能)。列表();
    • 我也试过用这个设置类型:NHibernateUtil.GetSerializable(typeof(NHibernate.Type.AnsiStringType))
    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2015-07-26
    相关资源
    最近更新 更多