2009-07-21 4 views
1

datetime 필드가있는 MySql 데이터베이스에 테이블이 있습니다. 이것은 다음과 같은 속성을 가진 hbm.xml 파일에 내 도메인 개체에 매핑 :NHibernate가있는 MySql 데이터베이스의 도메인 개체에서 DateTime 해상도가

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

이 모두 잘 작동을, MySQL은 날짜 시간 필드의 밀리 초 부분을 저장하지 않습니다 제외. 그러나 나는 도메인 객체가 데이터베이스에 저장된 정확한 값을 갖도록 업데이트되기를 바랍니다. 도메인 개체를 저장하는 데 사용하는 동일한 세션에서이 작업을 수행 할 수 있기를 원합니다.

이것이 가능합니까?

답변

0

간단한 방법은 session.Refresh (엔터티)를 수행하는 것입니다.하지만 이로 인해 추가 쿼리가 생성됩니다.

인터셉터가 작동하면 매우 무거워 보입니다. 당신은 뭔가 싶어

http://www.nhforge.org/doc/nh/en/index.html#objectstate-interceptors (11.1) 된 OnSave에 대한 일의

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

같은 종류의().

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

난 몰라 ... 난 최선의 대답은 확실하지 않다. 그냥 아이디어를 제공합니다. 더 좋은 방법이있을 수 있습니다!

+0

저는 데이터베이스에 다시 도달하더라도 session.Refresh를 사용하려고합니다. 이것은 이미 유용함이 입증되었습니다. 연결 문자열에 문자 세트를 설정하지 않고 유니 코드 문자를 잃어 버렸습니다.). – Andrew

+0

Yah, Session.Refresh()와 같은 질문을 다시 읽는 것이 올바른 대답이었습니다. – anonymous

관련 문제