2

私は完全に困惑している奇妙な問題を抱えています。

残念ながら、私は多くの関係を持つドメイン オブジェクトを持っています (これを変更することはできません) 本質的に、クエリを構築し、熱心なフェッチを追加するだけで、特定の量を追加した後、構築時間が大幅に増加します最終的にビジュアルスタジオがフリーズしてクラッシュするまで。クエリは非常に単純で、次のようになります。

var query = QueryOver<DomainObject>
.Fetch(x => x.Property).Eager
.Fetch(x => x.Property.PropertyA).Eager
.Fetch(x => x.Property.PropertyB).Eager
.Fetch(x => x.Property.PropertyC).Eager
.Fetch(x => x.Property.PropertyD.SubProp).Eager
.Fetch(x => x.Property.PropertyE).Eager
.Fetch(x => x.Property.PropertyF.SubProp).Eager
.Fetch(x => x.Property.PropertyG).Eager
.Fetch(x => x.Property.PropertyH.SubProp).Eager
.Fetch(x => x.Property.PropertyI).Eager
.Fetch(x => x.Property.PropertyJ).Eager
.Fetch(x => x.Property.PropertyK).Eager
.Fetch(x => x.Property.PropertyL).Eager
.Fetch(x => x.Property.PropertyM).Eager
.Fetch(x => x.Property.PropertyN).Eager
.Fetch(x => x.Property.PropertyO).Eager
.Fetch(x => x.Property.PropertyP).Eager
.Where(x => x.Id == 5);
//My fingers got tired there are in reality 33 fetches, 29 involve x.Property

query.Clone()
.Fetch(x => x.Property.PropertyN.ListProperty).Eager
.Future();

query.Clone()
.Fetch(x => x.PropertyO.ListProperty).Eager
.Future();

query.Clone()
.Fetch(x => x.PropertyD.ListProperty).Eager
.Future();

query.Clone()
.Fetch(x => x.PropertyH.ListProperty).Eager
.Future();

var results = query.Future().ToList();

これは本質的に、私たちが見ている疑似クエリです.フェッチのセクションをコメントアウトすると、一度に1つのフェッチのコメントを外すと、ビルド時間が長くなり、最終的にVisual Studioがロックアップし、最終的にはビルド時間が長くなります.構築を完了することはありません。

誰もこれについて何か手がかりを持っていますか? 私はインターネットを検索しようとしましたが、関連する情報を見つけることができませんでした。現時点では、遅延読み込みが唯一の選択肢のようです。しかし、私はこれに対する答えが本当に好きです。

4

1 に答える 1

2

したがって、問題がコンパイラにメソッドチェーンのサイズの制限があることである場合、解決策は(理論的には)単純です。

var query = QueryOver.Of<DomainObject>();
query = query.Fetch(x => x.Property).Eager;
query = query.Fetch(x => x.Property.PropertyA).Eager;
query = query.Fetch(x => x.Property.PropertyB).Eager;
query = query.Fetch(x => x.Property.PropertyC).Eager;
// etc
于 2013-01-30T03:14:00.280 に答える