Мне интересно, как наилучшим образом реализовать свойство (здесь LatestRequest
), предназначенное только для чтения, подкрепленное запросом.
Здесь у меня есть экспорт, который может быть запрошенмногократно.Я хотел бы иметь свойство на экспорт, чтобы получить последнюю ExportRequest
.В настоящее время у меня есть сопоставление "многие к одному" с формулой, например:
<class name="Export" table="Exports">
<id name="Id">
<generator class="guid" />
</id>
<property name="Name" />
<bag name="Requests" cascade="all,delete-orphan" inverse="true" access="field.camelcase" order-by="CreationDate desc">
<key column="ExportId"/>
<one-to-many class="ExportRequest"/>
</bag>
<many-to-one name="LatestRequest"
class="ExportRequest"
formula="(select top 1 ExportRequests.Id from ExportRequests order by ExportRequests.CreationDate desc)"/>
</class>
<class name="ExportRequest" table="ExportRequests">
<id name="Id">
<generator class="native" />
</id>
<many-to-one name="Export"
class="Export"
column="ExportId"
not-null="true" />
<property name="CreationDate" />
<property name="Tag" />
</class>
Однако, поскольку ExportRequests.Id
для LatestRequest
выбирается при получении экспорта,этот шаблон доступа возвращает устаревшие данные:
var export = session.Get<Export>(exportId);
export.AddRequest(new ExportRequest(DateTime.Now, "Foo"));
Assert.AreEqual("Foo", export.LatestRequest.Tag); // fails due to stale data
session.Update(export);
Итак, каков наилучший способ реализации свойства LatestRequest
?
Я мог бы изменить геттер для LatestRequest
, чтобы он выполнялFind
запрос, который должен быть актуальным, но я не уверен, как сделать экспорт осведомленным о сеансе.