Mapping файла:NHibernate + Oracle: Как избежать миллисекунды усечение при вставке
<?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();
}
Код выше будет вставить новую строку, но миллисекунды в колонке Время обрезаются.
Из исследования я обнаружил, что NHibernate создаст команду OracleParameter для SQL с параметром, где OracleType устанавливается в DateTime вместо TimeStamp. В Oracle DateTime нет миллисекунд.
Что-то не так - в другом месте. Пример, который вы дали, будет вызывать ALWAYS с ** миллисекундами **. Ваше сопоставление и код верны. Проверите с каким-то профилиром, что передается в БД, я бы сказал ... –