Свободно-NHibernate и постоянный DateTime автоматически - PullRequest
2 голосов
/ 12 июня 2009

Я использую S # arpArchitecture (ASP.NET MVC и Fluent NHibernate). У меня есть сущность следующим образом:

public class User : Entity
{
    public User(){}
    public User(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }

    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual DateTime? LastUpdate{ get; set; }
}

Я вызову метод SaveOrUpdate в своем классе репозитория, который сохранит этот объект User. Оно работает. Как мне автоматически сохранить свойство LastUpdate с самой последней датой и временем? Я мог бы переопределить метод SaveOrUpdate в своем репозитории, всегда устанавливая свойство LastUpdate на текущую дату и время, но это не кажется правильным, потому что если в моей сущности ничего не изменилось, я не думаю, что NHibernate сохранит мой объект обратно БД и принудительное задание этого свойства всегда сохранят его обратно.

Я хочу, чтобы это свойство LastUpdate устанавливалось только в том случае, если в моей сущности что-то изменилось.

Ответы [ 3 ]

1 голос
/ 17 апреля 2013

Поскольку вы не указали тип своей базы данных, я позволю себе и добавлю решение для людей, использующих MySQL / MariaDB:

Вы можете использовать следующее в своем классе беглого отображения:

Map(y => y.LastUpdate).CustomSqlType("timestamp").Generated.Always();

Это создает столбец MySQL TIMESTAMP со значением по умолчанию CURRENT_TIMESTAMP. Таким образом, если Nhibernate выберет очистку вашей сущности, MySQL позаботится о том, чтобы столбец был правильно обновлен.

Я почти уверен, что это не очень хорошо работает с MSSQL, поскольку TIMESTAMPS - разные звери в MSSQL ( здесь и здесь )

1 голос
/ 12 июня 2009

Вы должны использовать NHibernate Interceptor для этого. Переопределите OnFlushDirty в вашей реализации перехватчика, чтобы установить свойство LastUpdate, только когда что-то изменилось (т. Е. Ваш объект загрязнен).

0 голосов
/ 12 июня 2009

Я собираюсь указать на другой вопрос StackOverflow , который, я думаю, отвечает на мой вопрос.

...