我试图将DateTimeOffset映射到Oracle类型“TIMESTAMP WITH TIME ZONE”但没有运气。
然后我决定编写一个使用两列的CustomType(第一个是UTC Date字段,另一个是TimeZone偏移,以分钟为单位)。生成的Oracle SQL是这样的:
select *
from TIME_EVENTS timeevent0_
where (
timeevent0_.TIME_STAMP_UTC ge TIMESTAMP '2017-07-04 00:00:00.00' /* :p0 */ and
timeevent0_.TIME_STAMP_TZ ge 0 /* :p1 */)
_unitOfWork.For<TimeEvent>().Where(x=>x.MyCustomDateWithOffset >= Date.Now()
在CustomType中指定SQL应该如下所示
select *
from TIME_EVENTS timeevent0_
where (
timeevent0_.TIME_STAMP_UTC >= TIMESTAMP '2017-07-04 00:00:00.00' /* :p0 */ and
timeevent0_.TIME_STAMP_TZ = 0 /* :p1 */)
我希望第二个参数相等(=),而不是更大或相等(&gt; =)。只是第一个参数应该是&gt; =。
会话工厂
case "ORACLE":
return OracleClientConfiguration.Oracle10
.AdoNetBatchSize(100)
.ConnectionString(
string.Format("User >Id= {0};Password={1};Data Source={2}",
credentialStore.UserName, credentialStore.Password,?
credentialStore.DataSource));
NHibernate版本:4.0.0.4000 流利版本:2.0.3.0
帮助表示感谢。关心西蒙
答案 0 :(得分:0)
您应该使用单列自定义类型。对于多列类型,仅支持equals并且可以产生一致的结果。不支持其他比较:两列代表相同的值,在两列中应用>
在大多数情况下只是非敏感。 NHibernate无法知道如何以有意义的方式进行这样的比较,因此不支持它。
关于使用单列自定义类型,它应该在.Net DateTimeOffset
和Oracle OracleTimeStampTZ
之间进行转换。 Oracle数据提供程序似乎只支持该特定类型。见this question。 OP表示他已成功做到这一点,但不幸的是他没有分享他的代码。
关于第二个问题,请不要问多个问题。但是,我不认为你的多列自定义类型是可行的。这只是具体的。