多くの電子メールを持つことができるユーザーがいます。これは List コレクションを通じてマップされます (ユーザーの IEnumerable Emails によって公開されます)。ユーザーごとに、メールの 1 つがプライマリになります (メールの「Boolean IsPrimary」プロパティ)。
NHibernate がユーザーのすべての電子メールをロードせずに、ユーザーからプライマリ電子メールを取得するにはどうすればよいですか?
次の 2 つのエンティティがあり、それぞれに対応するテーブルがあります
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 つに変更できるはずなので、それらをすべて 1 つのテーブルに保持し、IsPrimary プロパティを変更するだけです。
SQL 式を使用して、現在のプライマリ電子メールの IsPrimary プロパティを false に設定し、その後 PrimaryEmail プロパティを電子メールに設定すると、ユーザーの "PrimaryEmail" プロパティを最新の状態に保つことができますか? IsPrimary を true に設定し、新しいプライマリ電子メールにする必要がありますか? NHibernate は、Sql Formula によってロードされた「古い/現在の」プライマリ電子メールの変更を追跡しますか? SqlFormula を使用する場合の 1 レベル キャッシュと 2 レベル キャッシュはどうですか?
View を使用して機能するかどうかわかりませんか?次に、電子メールをコンポーネントのようにマッピングできると思いますか? View からロードされたときに Email データを更新するときに機能しますか?
より良い方法はありますか?
ユーザーと電子メールの間に双方向の関係があるため、多くの場合、もちろんプライマリ電子メールを照会し、電子メールの「ユーザー」プロパティを使用してユーザーを取得できます (逆の代わりに、ユーザーからユーザーへプライマリ電子メール)
誰かが助けてくれることを願っていますか?