ソリューションをデータ ドメインから少しだけ移動する場合、ユーザーは、友人として割り当てた他のユーザーと 1 対多の関係を持つことができます。これは、protected
またはprivate
漏れたくない場合に発生する可能性があります。
次に、実際の友情を両方向の関係を必要とするものとして定義するパブリック プロパティを実装します。たぶん次のようなもの:
public List<User> Friends {
this.assignedFriends.Where(f => f.assignFriends.Contains(this)).ToList();
}
ただし、これを行う場合は、第 2 レベルのキャッシュの形式を使用していることを確認する必要があります。そうしないと、このプロパティへのリクエストがデータベースに打撃を与えます。
代わりに専用オブジェクトのコレクションを返す必要がある場合は、Friendship
それらのエントリを永続化する方法とそのクラスをどのようにマップしたかによって異なります。
1 つのオプションはFriendship
、単純に 3 つの列、1 つの主キー、および 2 つの外部キーをUser
テーブルに戻すように定義することです。次に、誰かが友達を追加しようとするたびに、少しロジックが必要になります。最初に、関係の半分が既に存在するかどうかを確認する必要があります..
var f = session.Query<Friend>()
.Where(x => x.User1 == YourCurrentUser)
.Cacheable()
.FirstOrDefault();
それが存在する場合は、関係の残りの半分を割り当てます
f.User2 = TheOtherUser;
それ以外の場合は、新しいオブジェクトを作成します:
f = new Friendship();
f.User1 = YourCurrentUser;
そして、いずれかの分岐の後:
session.SaveOrUpdate(f);
その後、User
sの友達は次のようになります
public property List<Friendship> {
session.Query<Friendship>()
.Where(f =>
f.User1 != null && f.User2 != null
&& (f.User1 == this || f.User2 == this)
).Cacheable()
.ToList();
}
私はVSのインストールの近くにいないことに注意してください。タイプミス、または明らかな間違いを犯した場合は、ご容赦ください(現在、午前2時30分です)