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