【问题标题】:NHibernate+Oracle: How to avoid millisecond truncation on insertNHibernate+Oracle:如何避免插入毫秒截断
【发布时间】:2014-08-25 16:14:18
【问题描述】:

映射文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="OracleHibernateTest" namespace="OracleHibernateTest">
<class name="TableRow" table="TIMESTAMP_TEST_2">
    <id name="Id" />
    <property name="Time" type="Timestamp">
        <column name="TIME" sql-type="TIMESTAMP(4)"></column>
    </property>    
</class>
</hibernate-mapping>

代码:

    var configuration = new Configuration();
    configuration.Configure();
    var export = new SchemaExport(configuration);
    export.Create((s) => Trace.WriteLine(s), true);
    var sessionFactory = configuration.BuildSessionFactory();
    using (var session = sessionFactory.OpenSession())
    {
        var testItem = new TableRow() { Id = (new Random().Next()), Time = new DateTime(2014, 8, 25, 5, 12, 4, 587) };
        session.Save(testItem);
        session.Flush();
    }

上面的代码将插入新行,但 Time 列中的毫秒数被截断。

通过调查,我发现 NHibernate 将为 SQL 命令创建 OracleParameter,其中 OracleType 设置为 DateTime 而不是 TimeStamp。 在 Oracle DateTime 中没有毫秒。

【问题讨论】:

  • 出了点问题 - 其他地方。您给出的示例将始终以 毫秒 发出语句。您的映射和代码是正确的。用一些探查器检查传递给 DB 的内容,我会说...

标签: oracle nhibernate oracleclient


【解决方案1】:

经过更多调查,我尝试将 Oracle 客户端驱动程序(ODAC 12c Release 2 12.1.0.1.2 Xcopy)更新到可用的最新版本,这解决了我的问题。似乎是旧版 Oracle 驱动程序的问题。

【讨论】:

    猜你喜欢
    • 2014-10-16
    • 2010-11-03
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多