Campaign
いくつかの文字列プロパティとオブジェクトのコレクションを含むというドメインオブジェクトがありTrackingEntry
ます。ドキュメントセッションからクエリを取得するときは常に、少なくとも1つの追跡エントリが保存されていても、このプロパティは空です。トラッキングエントリコレクションも取得されるように、キャンペーンオブジェクトの取得にどのようにアプローチできますか?に関連するコードは次のCampaign
とおりです。
public class Campaign : Entity
{
private ICollection<TrackingEntry> trackingEntries;
public string BrandId { get; set; }
public ICollection<TrackingEntry> TrackingEntries
{
get { return trackingEntries ?? (trackingEntries = new Collection<TrackingEntry>()); }
}
}
問題のあるメソッドは、ブランドIDのカンマ区切りの文字列を受け取り、それらのブランドIDを持つすべてのキャンペーンを取得し、ループして、追跡エントリコレクションのコンテンツに基づいてカスタムロジックを実行します。関連する部分は次のとおりです。
var brandIds = input.Split(',');
var campaigns = session.Query<Campaign>().Where(x => x.BrandId.In(brandIds));
foreach (var campaign in campaigns)
{
DateTime? dateClaimed = null;
var trackingEntry = campaign.TrackingEntries.FirstOrDefault(x => x.ConsumerId == consumer.Id);
if (trackingEntry != null)
{
dateClaimed = trackingEntry.CreatedOn;
}
}
追跡エントリが1つあることは知っていますが、ブレークポイントを設定すると、空のコレクションが表示されます。レイヴンキャッシングと古いインデックスの可能性があると思いましたが、データベースにレコードを書き込んでから24時間経っても問題は解決していません。そのコレクションを処理するには、おそらくmap-reduceインデックスが必要だと思いますが、それでもそれらがどのように機能するかについては非常に曖昧です。考え?