ObjectDataSourceのselectメソッドがあります。
public static IEnumerable<Model.Domain.Theme> Select()
{
var cycleRepo = new RbaCycleRepository(Global.sessionFactory.GetCurrentSession());
RbaCycle lacOpenCycle = cycleRepo.FindLacOpenCycle();
if (lacOpenCycle != null)
{
var themeRepo = new ThemeRepository(Global.sessionFactory.GetCurrentSession());
var result = themeRepo.FindAll(new ThemesForCycle(lacOpenCycle).GetQuery());
return result;
}
return Enumerable.Empty<Model.Domain.Theme>();
}
そして、ここにシナリオがあります:
- ボタンをクリックすると、いくつかのアクションが実行され、その結果、第1レベルのキャッシュにいくつかのプロキシテーマオブジェクトが作成されます。これは問題ありません。
- Select()メソッドが呼び出され、結果が返されます。結果には、テーマオブジェクトのみ、またはテーマとNHibernate Castleプロキシの組み合わせ(たとえば)を含めることができます。これはウォッチウィンドウからのトレースです。
{Castle.Proxies.ThemeProxy} Model.Domain.Theme {Castle.Proxies.ThemeProxy} {Model.Domain.Theme} Model.Domain.Theme
- 結果コレクションの最初のオブジェクトが実際のテーマオブジェクトである場合、コレクション全体のバインドは成功します。しかし、コレクションの最初の要素がProxyオブジェクトである場合、例外が発生します。
未処理の例外:System.Web.HttpUnhandledException:タイプ'System.Web.HttpUnhandledException'の例外がスローされました。---> System.Reflection.TargetInvocationException:オブジェクト'CIPNet.Model.Domain.Theme'のプロパティアクセサー'Title'は、次の例外をスローしました:'オブジェクトがターゲットタイプと一致しません。' ---> System.Reflection.TargetException:オブジェクトがターゲットタイプと一致しません。
編集:これはFindAllの実装です:
public IList<T> FindAll(QueryOver<T, T> query)
{
return query.GetExecutableQueryOver(session).List();
}