Я использую отношение «многие к одному» следующим образом:
Классы:
public class Account
{
public virtual long AccoungID { get; set; }
public virtual string UserName { get; set; }
}
public class AnotherClass
{
public virtual long AClassID { get; set; }
public virtual Account Account { get; set; }
}
Отображения:
<class name="Account">
<id name="AccountID">
<generator class="hilo"/>
</id>
<property name="Username"/>
</class>
<class name="AnotherClass">
<id name="AnotherClassID">
<generator class="hilo"/>
</id>
<many-to-one name="Account" class="Account" column="AccountID"/>
</class>
Это работает нормально, с отложенным чтением свойства Account для экземпляра AnotherClass.
Однако из-за приложения, в котором я работаю, будет много экземпляров AnotherClass с высокой пропускной способностью. Там будет только несколько аккаунтов. Счета уже кэшируются в памяти в списке. Я могу гарантировать, что список учетных записей в памяти совпадает со списком в базе данных.
Вместо ленивого чтения, попавшего в базу данных для получения сведений об учетной записи, я хочу перехватить либо заполнение объекта, либо ленивое чтение и ссылаться на нужный элемент в списке кэшированных учетных записей. Это дает два преимущества - гораздо меньшее количество вариантов выбора, и любые изменения в учетных записях будут автоматически отражаться в экземплярах AnotherClass, поскольку все они будут ссылаться на один и тот же экземпляр учетной записи.
Из-за ленивого чтения я могу получить доступ к свойству AnotherClass.Account.AccountID без дополнительного выбора. Надеюсь, это поможет.
Я все еще хочу, чтобы операции добавления / обновления / удаления в объекте AnotherClass обновляли свойство AccountID.
Таким образом, вопрос заключается в следующем: как можно заполнить свойство Account данными из кэшированного списка вместо базы данных на основе AccountID из таблицы AnotherClass?