0

nHibernate ISession 機能をラップする NCommon の UnitOfWorkScope を使用しています。私たちの目標は、複雑なプロパティをオンデマンドで熱心にロードするのではなく、構成を介して常に熱心にロードすることです。エンティティを取得する特定のサービスは、呼び出し元のコードによって少しカスタマイズできるという考え方です。親エンティティのみをハイドレートしたい場合もあれば、複雑な子プロパティもハイドレートしたい場合もあります。

これを実現するために、次のことを行っています。

  var iSession = unitOfWorkScope.CurrentUnitOfWork<NHUnitOfWork>().GetSession<ParentEntity>();

  iSession.CreateCriteria<ParentEntity>().SetFetchMode("Children", FetchMode.Eager);

セッションでセットアップしたら、NCommon の IRepository 機能を使用してエンティティを取得します。

  var parent = parentRepository.FirstOrDefault(x => x.Id == 123);

ただし、parent.Children コレクションを確認すると、次のようになります。

  NHibernate.Collection.Generic.PersistentGenericBag<ChildEntity>

...これは、Eager-loading が発生しなかったことを示しています。NH マッピングを変更して常に熱心な読み込みを強制すると、子が正しく表示されます。

誰でもこれに光を当てることができますか?FetchMode.Eager が無視されるため、何かが足りないと思います。

4

1 に答える 1

0

これが解決策でした。ここにあります:

http://slynetblog.blogspot.com/2011/11/in-spite-of-common-now-approach-of.html

于 2012-07-11T03:17:36.140 に答える