NHibernateの多対多の関係があります。リレーションシップにアイテムを追加する前に、そのアイテムがコレクションにすでに存在するかどうかをテストしたい。 Addメソッドは次のようになりますNHibernateがMyListにProxy要素を設定するとき、MyList.Contains(MyObject)をどのように使用しますか?
public virtual void AddCourse(Course course)
{
if (!this.Courses.Contains(course))
{
course.Students.Add(this);
this.Courses.Add(course);
}
}
Courses.Contains(course)ステートメントは常に失敗します。私はいくつかの掘り下げを行ったし、コースのリストは、私のドメインオブジェクトではないNHibernateのプロキシのリストであることに気づいた。私の正気のために、私は平等が正しく働くように設定されていることを示したテストをノックしました。このテストでは、Containsがサブクラスで動作しないことも示されています。
コースコレクションでレイジーローディングを無効にしていて、コードが正常に動作しています。
レイジーロードされたオブジェクトではどうしますか?
私はこの方法で時間を過ごしましたが、まだハックのように感じます。 –
これが機能する場合は、これが解決策です。それは、ハックや「blablasoftのベストパターンと実践などによって認定され、承認されても」です。 – Genius