Разрешение DateTime в доменном объекте в базе данных MySql с помощью NHibernate - PullRequest
1 голос
/ 21 июля 2009

У меня есть таблица в базе данных MySql с полем datetime. Это сопоставлено с моим объектом домена в hbm.xml файле со свойством, подобным следующему:

<property name="StartDate" column="datStartDate" not-null="true" type="datetime"/>

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

Возможно ли это?

1 Ответ

0 голосов
/ 21 июля 2009

Простой способ - сделать session.Refresh (entity), но это приведет к дополнительному запросу.

В Interceptor будет работать, просто кажется очень тяжелым.

http://www.nhforge.org/doc/nh/en/index.html#objectstate-interceptors (11,1)

Вы бы хотели что-то вроде:

public override bool OnFlushDirty(object entity, 
                                  object id, 
                  object[] currentState,
                  object[] previousState, 
                  string[] propertyNames,
                  IType[] types) 
{
    if(entity is DomainObjectICareAbout)
        for ( int i=0; i < propertyNames.Length; i++ ) {
            if ( currentState[i] is DateTime ) {
                DateTime dt = (DateTime)currentState[i];
                dt = dt.AddMilliseconds(-1 * dt.Millisecond);
                return true;
            }
        }
    }
    return false;
}

То же самое для OnSave ().

Возможно, было бы лучше сделать это в Custom IUserType, но я не уверен, что типы пользователей предоставляют такую ​​возможность?

Как для IUserType:

public void NullSafeSet(System.Data.IDbCommand cmd, object value, int index)
{
    DateTime dt = (DateTime)value;
    dt = dt.AddMilliseconds(-1 * dt.Millisecond);
    NHibernateUtil.DateTime.NullSafeSet(cmd, dt, index);
}

Я не знаю ... Я не уверен, что лучший ответ. Просто даю идеи. Там может быть лучший способ!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...