使用Oracle为NHibernate查询设置类型为AnsiString

时间:2012-06-27 16:39:34

标签: oracle nhibernate ansistring

经过一番挖掘后,我发现了以下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

2 个答案:

答案 0 :(得分:2)

其实里卡多你错了。 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必须进行类型转换,并且无法在搜索中使用索引。

我希望它有所帮助!

答案 1 :(得分:0)

AnsiString = VARCHAR = ANSI(不是UNICODE) String = VARCHAR2 = UNICODE

我猜你一定有别的错误。