使用NHibernate在MySql数据库中解析域对象的日期时间

使用NHibernate在MySql数据库中解析域对象的日期时间,mysql,nhibernate,Mysql,Nhibernate,我在MySql数据库中有一个带有datetime字段的表。这被映射到hbm.xml文件中的my domain对象,其属性类似于以下内容: 除了MySql不存储DateTime字段的毫秒部分外,这一切都可以正常工作。但是,我不介意,我希望域对象被更新,以具有存储在数据库中的确切值。我希望能够在保存域对象的同一会话中执行此操作 这可能吗?一种简单的方法是执行session.Refresh(实体),但这会导致额外的查询 在拦截器将工作,只是看起来很重 (11.1) 您可能需要以下内容: public

我在MySql数据库中有一个带有
datetime
字段的表。这被映射到
hbm.xml
文件中的my domain对象,其属性类似于以下内容:

除了MySql不存储DateTime字段的毫秒部分外,这一切都可以正常工作。但是,我不介意,我希望域对象被更新,以具有存储在数据库中的确切值。我希望能够在保存域对象的同一会话中执行此操作


这可能吗?

一种简单的方法是执行session.Refresh(实体),但这会导致额外的查询

在拦截器将工作,只是看起来很重

(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;
}

我不知道。。。我不确定最好的答案。只是提出一些想法。也许有更好的办法

我想我现在要使用session.Refresh,即使它再次访问数据库。这已经证明是有用的:我发现我没有在连接字符串中设置字符集,所以我丢失了unicode字符;)。是的,重新阅读你的问题(关于保持相同会话的部分),看起来会话。刷新()是正确的答案。
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);
}