【问题标题】:Setting type as AnsiString for NHibernate Queries using Oracle使用 Oracle 将 NHibernate 查询的类型设置为 AnsiString
【发布时间】:2012-06-27 16:39:34
【问题描述】:

经过一番挖掘我发现原因如下NHibernate查询

  IList<User> users = session.QueryOver<User>()                        
            .WhereRestrictionOn(user => user.EmployeeID)
            .IsInG<string>(new string[] {EmployeeID.ToUpper()})
            .List<User>();

在 Oracle 中不起作用是因为我没有将映射中的属性设置为“AnsiString”。即

 <property name="EmployeeID" column="LAN_ID" type="AnsiString" /> 

谁能告诉我为什么必须这样做? Oracle中的底层数据类型是varchar2

【问题讨论】:

    标签: oracle nhibernate ansistring


    【解决方案1】:

    其实里卡多你错了。 VARCHAR 和 VARCHAR2 相同,但建议使用 VARCHAR2。 NVARCHAR2 是 unicode 类型。签出:http://docs.oracle.com/cd/B19306_01/server.102/b14220/datatype.htm#i3253

    所以我的猜测是 - 如果您使用 VARCHAR2,您的 NHibernate 映射中需要 AnsiString。否则,它默认为 Unicode 字符串。如果您没有指定 AnsiString 并且您有 VARCHAR2 映射列,则存在更多问题,而不仅仅是“ToUpper”问题。 Oracle 将不得不进行类型转换,并且无法在搜索中使用索引。

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      AnsiString = VARCHAR = ANSI(不是 UNICODE) 字符串 = VARCHAR2 = UNICODE

      我猜你肯定有其他问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-15
        • 2020-11-12
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多