List として保存されている Property エンティティのすべてのレコードを取得しようとしています。このエンティティには写真のコレクションがあり、このコレクションには最大 5 つの画像を入力できます。
読み込み時間を短縮するために、プロパティのリストを取得し、各プロパティ内ではコレクションから最初の写真のみを取得したいと考えています。このクエリ以来
List<Domain.Property> data = session.Query<Domain.Property>()
.Fetch(x => x.Photos.First())
.ToList();
このエラーが発生します。フェッチ要求は、単純なメンバー アクセス式である必要があります。'[100002]' は代わりに SubQueryExpression です。パラメータ名: relatedObjectSelector.
だから私は使う
List<Domain.Property> data = session.Query<Domain.Property>()
.ToList();
リストとforeachループでプロパティを取得して、すべてのプロパティにアクセスし、nhib内に写真オブジェクトをロードしようとしました。このようなセッション
var a = PropertyViewModel.FromDomainModel(data, session);
public static List<PropertyViewModel> FromDomainModel(IList<Property> x, ISession session)
{
List<PropertyViewModel> dataVm = new List<PropertyViewModel>();
foreach (Property p in x)
{
Photo firstPhoto = session.Get<Photo>(p.Photos[0].Id);
dataVm.Add(new PropertyViewModel(p, firstPhoto));
}
return dataVm;
}
public PropertyViewModel(Property x, Photo y)
{
Id = x.Id;
...
Photo = new Photo();
Photo = y;
}
このアプローチは (少なくとも私にとっては :)) うまく見えますが、nhib に従ってロードされます。プロファイラー 65 個のエンティティ (そのうち、写真識別子は 46 個の読み込み、プロパティ 19 個の識別子)。 (すべてのプロパティの 19 のプロパティ ID と 19 の写真 ID の最初の画像をロードする必要があります)。
ここで何を間違えるべきですか?
私は予測に慣れていないので、これが最後の解決策になるはずです。
ありがとう