У меня есть следующее сопоставление для моей таблицы в MySql:
<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. Поля create_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
обнуляется, хотя в таблице эти поля имеют значения.
Может ли кто-нибудь указать, почему Session.Get
игнорирует возврат всего со стола? это потому, что он кэширует вновь созданную запись, для которой records_dates имеет значение null? Если так, как можно сказать игнорировать кэшированную версию?