Рассмотрим следующий простой класс C #:
public class Entity
{
public Entity() { }
public virtual int Id { get; private set; }
public virtual DateTime DateCreated { get; private set; }
}
Отображается с помощью следующего простого сопоставления NHibernate:
<class name="Entity" mutable="false">
<id name="Id">
<generator class="native">
</id>
<property name="DateCreated"/>
</class>
К следующей простой схеме базы данных:
CREATE TABLE Entity (
Id int IDENTITY(1,1) PRIMARY KEY,
DateCreated datetime NOT NULL DEFAULT getUtcDate()
)
Когда вы создаете новый экземпляр Entity
и сохраняете его в базу данных, как вы предписываете NHibernate использовать значение базы данных по умолчанию для столбца DateCreated
, если его значение равно null
? В качестве альтернативы, как я могу указать, что NHibernate должен использовать результат функции getUtcDate()
в качестве значения для поля DateCreated
после вставки?
Хотя я мог бы легко добавить
DateCreated = DateTime.Now;
в конструкторе Entity, это использует локальные часы сервера приложений, и мне нужно использовать локальные часы базы данных, чтобы обеспечить согласованность при наличии нескольких серверов приложений, каждый из которых имеет потенциально несинхронизированные локальные часы.