Отображение NHibernate <timestamp>для базы данных Oracle вызывает исключение StaleStateException - PullRequest
3 голосов
/ 21 декабря 2010

У нас есть приложение NHibernate, которое мы переносим с SQL Server на Oracle.Наш оптимистичный параллелизм реализуется с помощью элемента отображения <timestamp name="Version">.

Тип данных соответствующего столбца Version в Oracle - DATE.После того, как мы сохранили объект, объект C # в памяти остается со значением метки времени в миллисекундах (например, 12: 34: 56.789), в то время как значение в базе данных является точным только с точностью до секунды (например, 12:34:56).Таким образом, если мы попытаемся сохранить объект во второй раз, мы получим StaleStateException, потому что два значения не совпадают.

Я попытался исправить это, изменив тип данных столбца Version на TIMESTAMP(3).К сожалению, объект C # и значение DB по-прежнему отключены на одну миллисекунду (например, 12: 34: 56.789 против 12: 34: 56.788), поэтому вторая попытка сохранить объект по-прежнему вызывает исключение StaleStateException.

Чтоможно сделать для создания рабочего сопоставления <timestamp> со столбцом Oracle типа DATE или TIMESTAMP, чтобы один и тот же объект можно было сохранить несколько раз?

Спасибо.

-- Брайан

1 Ответ

4 голосов
/ 22 января 2011

TIMESTAMP (7) имеет правильную точность, соответствующую классу .NET DateTime, и устранил проблему.

...