Можно установить временное игнорирование для поля в nhibernate (чтобы оно не обновляло это поле при фиксации) - PullRequest
0 голосов
/ 04 июня 2011

Мне интересно, когда я возвращаю свой объект (скажем, Файл), и я делаю эти изменения в нем.

File.Name = "test";
File.Id = 1;
File.Date = "6/3/2011 12:00:00 am";
File.IsLocked = false

, поэтому я возвращаю этот объект файла, но Дата не по местному времени.Поэтому, когда я получаю его обратно, я сразу же конвертирую его в местное время.

Я делаю это сразу (в том же методе репо), как это всегда должно быть в этот момент, эта дата должна быть по местному времени.Я мог бы преобразовать его в другой момент, что решило бы мою проблему, но тогда программист всегда должен помнить, как только они возвращают объект File, им придется вручную вызывать метод convertToLocalTime ().

Из прошлого опыта это закончилось.плохо со многими раз это было забыто преобразовать в местное время.Так что я действительно хочу оставить это там.

Итак, моя проблема в том, что

Файл теперь выглядит так, как когда-то вернулся

File.Name = "test";
    File.Id = 1;
    File.Date = "6/3/2011 5:00:00pm";
    File.IsLocked = false

Теперь я должен взять этот объекти измените File.IsLocked на True

File.Name = "test";
    File.Id = 1;
    File.Date = "6/3/2011 5:00:00pm";
    File.IsLocked = true

Теперь проблема в том, что мне нужно сохранить это, но я не хочу сохранять местное время.Я хочу проигнорировать это для этого одного коммита (возможно, в других случаях, когда Дата должна быть сохранена, но не в этом случае)

Могу ли я как-то сказать nhibernate не сохранять конвертированную дату?

1 Ответ

0 голосов
/ 04 июня 2011

Если вы используете класс-перехватчик, вы можете вызвать convertToLocalTime (), не позволяя программисту!

public class TestInterceptor
  : EmptyInterceptor, IInterceptor
{
    private readonly IInterceptor innerInterceptor;

    public TestInterceptor(IInterceptor innerInterceptor)
    {
        this.innerInterceptor = this.innerInterceptor ?? new EmptyInterceptor();
    }


 public override bool OnSave(object entity, 
                                object id, 
    object[] state, 
    string[] propertyNames, 
    IType[] types)
    {
        if ( entity is yourType) {
            //call convertToLocalTime()
        }
        return this.innerInterceptor.OnSave(entityName, id,state,propertyNames,types);
    }


}

hth

updated

Перехватчики - это классы, позволяющие переопределять базовые методы nhibernate, такие как OnSave, OnLoad ..., которые вызываются для каждой сущности.

Смотрите здесь:

Реализация перехватчиков NHibernate

и вы можете свободно настроить его:

return Fluently.Configure()
           ...
            .ExposeConfiguration(c =>{c.Interceptor = new TestInterceptor(c.Interceptor ?? new EmptyInterceptor());})
            ...
            .BuildConfiguration();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...