를 사용하여 삽입 후 즉시 조회 할 때 나는이 MySQL을 내 테이블에 대해 다음 매핑 : 잘못된 구성 요소 NHibernate에
<class name="Tag, namespace" table="tags" >
<id name="id" type="Int32" unsaved-value="0">
<generator class="native"></generator>
</id>
<property name="name" type="String" not-null="true"></property>
<component name="record_dates" class="DateMetaData, namespace" >
<property name="created_at" type="DateTime" not-null="true"></property>
<property name="updated_at" type="DateTime" not-null="true"></property>
</component>
</class>
당신이 record_dates 속성 타입 DateMetaDate의 구성 요소 필드로 정의된다시피
. 'tags'테이블의 created_at 및 updated_at 필드는 모두 트리거를 통해 업데이트됩니다. 따라서 나는 그런처럼 새 레코드를 삽입 할 수 있습니다 그러나var newTag = new Tag()
{
name = "some string here"
}
Int32 id = (Int32)Session.Save(tag);
Session.Flush();
ITag t = Session.Get<Tag>(id);
ViewData["xxx"] = t.name; // -----> not null
ViewData["xxx"] = t.record_dates.created_at; // -----> is null
을 다시 바로이 record_dates
필드를 삽입 한 후 동일한 레코드를 조회 테이블에서 해당 필드 값을 가지고있다하더라도 null의 끝 때.
Session.Get
이 테이블에서 모든 것을 다시 가져 오는 것을 무시하는 이유는 무엇입니까? 그것은 records_dates가 null 인 새로 작성된 레코드를 캐시하기 때문입니까? 그렇다면 어떻게 캐시 된 버전을 무시하라고 할 수 있습니까? 사용
제안 해 주셔서 감사합니다. 나는 그것을 시험해 보았고 행운이 없었다. 참고로'hbn.xml '파일의 변경 사항이 반영되도록 DTO 프로젝트를 다시 작성했습니다. – Roman
가져 오기 대신로드를 사용해 볼 수도 있습니다. 로드가 당신이 필요로하는 것의 반대를하기 때문에 그것이 도움이 될 것이라고 나는별로 희망이 없지만. 그러나 어쨌든 시도 할 수 있습니다. 로드와 가져 오기의 차이점에 대한 자세한 내용은이 링크를 참조하십시오. http://ayende.com/Blog/archive/2009/04/30/nhibernate-ndash-the-difference-between-get-load-and-querying-by.aspx – Prashant