У меня есть пользователь, который может иметь много электронных писем. Это отображается через коллекцию List (предоставленную IEnumerable Emails для пользователя). Для каждого Пользователя одно из Электронных писем будет Первичным (свойство Boolean IsPrimary в Электронной почте).
Как я могу получить основное электронное письмо от пользователя, если NHibernate не загружает каждое электронное письмо для пользователя?
У меня есть следующие два объекта с соответствующей таблицей для каждого
public class User
{
private readonly IList<Email> _emails;
public virtual int Id { get; private set; }
public virtual IEnumerable<Email> Emails { get { return _emails; } }
// public virtual Email PrimaryEmail { get; set; } - Possible somehow ?
}
public class Email
{
public virtual int Id { get; private set; }
public virtual String Address { get; set; }
public virtual Boolean IsPrimary { get; set; }
public virtual User User { get; set; }
}
Могу ли я сопоставить свойство «Email PrimaryEmail» и т. д. для пользователя с электронной почтой, для которой каким-то образом установлено «IsPrimary = 1»? Может быть, используя формулу Sql? вид ? отношения один к одному? или другой способ?
Должна быть возможность изменить основной адрес электронной почты на один из других адресов электронной почты, поэтому я хотел бы сохранить их все в 1 таблице и просто изменить свойство IsPrimary.
Используя формулу Sql, можно ли сохранить свойство «PrimaryEmail» для пользователя в актуальном состоянии, если я установлю для свойства IsPrimary текущего основного адреса электронной почты значение false, а затем установлю для свойства PrimaryEmail адрес электронной почты, который должен быть новым основным адресом электронной почты и установить для параметра IsPrimary значение true ? Будет ли NHibernate отслеживать изменения в «старом/текущем» основном электронном письме, загруженном формулой Sql? Как насчет кеша 1-го уровня и кеша 2-го уровня при использовании SqlFormula?
Я не знаю, может ли это работать с использованием View ? Тогда я предполагаю, что электронная почта может быть сопоставлена как компонент? Будет ли это работать при обновлении данных электронной почты при загрузке из представления?
Есть ли способ лучше ?
Поскольку у меня есть двунаправленные отношения между пользователем и электронной почтой, я мог бы во многих случаях, конечно, запросить основное электронное письмо, а затем использовать свойство «Пользователь» в электронной почте, чтобы получить пользователя (вместо обратного пути — перехода от пользователя к основной адрес электронной почты)
Надеюсь, кто-нибудь сможет помочь?