次のケースがあるとしましょう。との 2 つのテーブルがCounterparties
ありEvents
ます。1 つの取引相手は、0、1、またはそれ以上の関連イベントを持つことができます。
ID DataGrid を表示するために、最新のイベントでカウンターパーティ リストを取得したいので、次のように作成しました。
2 つのエンティティ:
public class Counterparty
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Event> Events { get; set; }
public Counterparty()
{
Events = new List<Event>();
}
}
public class Event
{
public virtual int Id { get; set; }
public virtual DateTime EventDate { get; set; }
public virtual string Description { get; set; }
public virtual Counterparty Counterparty { get; set; }
}
2 つのマッピング:
public class CounterpartyMap : ClassMap<Counteparty>
{
public CounterpartyMap()
{
Id(x => x.Id);
Map(x => x.Name);
HasMany<Event>(x => x.Events);
}
}
public class EventMap : ClassMap<Event>
{
public Event()
{
Id(x => x.Id);
Map(x => x.EventDate);
Map(x => x.Description);
Reference(x => x.Counterparty);
}
}
Counterparty
最新のものを含むためのヘルパー クラスEvent
public class LastestCounterpartyEvent
{
public Counterparty Counterparty { get; set; }
public ScoringResult ScoringResult { get; set; }
}
そして最後に、最新のイベントを持つすべてのカウンターパーティのリストを作成するメソッド:
public IList<LastestCounterpartyEvent> All()
{
// Added line of code responsible for data loading
var allCounterparties = DataContext.Session.QueryOver<Counterparty>().List();
return allCounterparties.Select(Prepare).ToList();
}
private LastestCounterpartyEvent Prepare(Counterparty counterparty)
{
var lastestCounterpartyEvent = new LastestCounterpartyEvent {Counterparty = counterparty};
if (counterparty.Events.Count > 0)
lastestCounterpartyEvent.Event =
counterparty.Events.OrderByDescending(x => x.EventDate).First();
return lastestCounterpartyEvent;
}
30 のカウンターパーティと 10 のイベントのデータ処理に 5 秒かかるため、優先順位は受け入れられません。
NHiberante は、最新のイベントをチェックする際に、カウンターパーティごとに個別のデータベース クエリを実行すると思います。
問題は、パフォーマンスを向上させるために何ができるかということです。