基本的に次のような単純なエンティティ クラスが WPF アプリケーションに含まれています。
public class Customer : MyBaseEntityClass
{
private IList<Order> _Orders;
public virtual IList<Order> Orders
{
get { return this._Orders; }
set {this._Orders = new ObservableCollection<Order>(value);}
}
}
また、オフライン ユーティリティで Fluent automapper を使用して、実行時に読み込まれる NHibernate 構成ファイルを作成しています。これはすべて正常に動作しますが、元のコレクションを NHibernate に戻していないため、明らかなパフォーマンス ヒットがあるため、NHibernate にコレクションを作成させるための規則を追加しようとしています。
public class ObservableListConvention : ICollectionConvention
{
public void Apply(ICollectionInstance instance)
{
Type collectionType =
typeof(uNhAddIns.WPF.Collections.Types.ObservableListType<>)
.MakeGenericType(instance.ChildType);
instance.CollectionType(collectionType);
}
}
ご覧のとおり、私は uNhAddIns コレクションの 1 つを使用しています。これは、規則と INotification の変更の両方をサポートするはずですが、何らかの理由でこれを行うと遅延読み込みが中断されるようです。このようなカスタム レコードを読み込むと...
var result = this.Session.Get<Customer>(id);
...その後、Orders フィールドには PersistentObservableGenericList 型のインスタンスが割り当てられますが、その EntityId フィールドと EntityName フィールドは null であり、注文を展開しようとすると、恐ろしい「読み込みコレクションへの不正アクセス」メッセージが表示されます。
私が間違っていること、および/またはこれを機能させるために何をする必要があるかを誰かに教えてもらえますか? 元のプロキシ オブジェクト (通常、Orders メンバーを遅延ロードするために必要な Customer ID を含む) が、正しいオブジェクトを追跡していない uNhAddIns コレクション項目に置き換えられていると仮定するのは正しいですか?
更新:この問題を示すテスト プロジェクトを作成しました。uNhAddins プロジェクトを直接参照していませんが、コレクション クラスは手動で追加されています。それがどのように機能するかは非常に簡単ですが、基本的にはドメインからデータベースを作成し、子リストを持つレコードを追加してから、子リストの実装としてコレクション クラスを使用して別のセッションにロードしようとします。遅延読み込みが失敗したため、アサートがスローされます。