经过一番挖掘后,我发现了以下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
答案 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
我猜你一定有别的错误。