NHibernate + столбец getdate () по умолчанию - PullRequest
1 голос
/ 17 июля 2009

Как настроить NHibernate для создания схемы БД с таким столбцом, как этот:

create_dt datetime not null default getdate()

У меня есть это в файле сопоставления:

<property name="create_dt" update="false" insert="false" generated="insert" not-null="true" />

Есть ли в любом случае, я могу ввести SQL Server конкретного default getdate(). В документации для сгенерированных свойств даже упоминается, как вы обрабатываете поле create_date. Я просто не уверен, как заставить мою схему БД генерировать правильно. Придется ли мне вручную редактировать сценарии создания таблицы?

Подобный вопрос .

РЕДАКТИРОВАТЬ : Я понял, что всегда могу изменить схему таблицы следующим образом:

<database-object>
    <create>ALTER TABLE Report ADD CONSTRAINT DF_report_create_dt DEFAULT getdate() FOR create_dt;</create>
    <drop></drop>
  </database-object>

и я мог бы добавить триггер таким же образом для поля типа update_dt. Это кажется лучше, чем предоставление явных операторов вставки и обновления, которые используют getdate ().

Ответы [ 2 ]

4 голосов
/ 18 июля 2009

Я всегда предпочитаю использовать систему событий NHibernate для установки моих свойств аудита, таких как дата создания или дата обновления. (См. Документацию системы событий здесь ).

Я предпочитаю этот подход, потому что он не допускает логики в уровне моей базы данных, но также дает мне возможность иметь единственное место в моем коде, которое отвечает за установку этих значений. И если у меня есть общий базовый класс для всех моих сущностей, я могу даже гарантировать согласованное поведение во всем моем домене.

2 голосов
/ 17 июля 2009

это ответ на тему для Hibernate ... он должен портировать на nHibernate без изменения его ...

https://forum.hibernate.org/viewtopic.php?f=25&t=996901&view=previous

см. Последнее сообщение.

В противном случае я всегда генерирую «дату создания» объекта в конструкторе класса:

public class MyClass
{
    private DateTime createdDate;

    public MyClass()
    {
        createdDate = DateTime.Now;
    }
}
...