Das folgende ist eine Vereinfachung meiner Problemdomäne. Wir haben eine Reihe von Trades, die jeder einen Eintrag in Bewertungen jeden Werktag bekommt.Fluent NHibernate führt Einzelreihenauswahl für Tausende von Objekten aus, um eine Verknüpfung zu Eltern herzustellen
Wir filtern unsere Die Bewertungen Liste für einen bestimmten Tag verwendet, aber die Handels gegen jeden der Valuation Reihen aufzufüllen, feuert NHibernate einreihig auf den rund 50k Zeilen in der Trades Tabelle auswählt Bewertungstabelle. Wie kann ich dies ändern, so dass NHibernate eine einzelne Auswahl in der Handelstabelle vornimmt?
CREATE TABLE Trades
( TradeId INT
, InstrumentType VARCHAR(20)
, TradeDate DATETIME
, PRIMARY KEY
( TradeId) )
CREATE TABLE Valuations
( TradeId INT
, ValueDate DATETIME
, PresentValue NUMERIC(12,4)
, PRIMARY KEY
( TradeId
, ValueDate ) )
.
class Trade
{
public int TradeId;
public string InstrumentType;
public DateTime TradeDate;
}
class Valuation
{
public int TradeId;
public DateTime ValueDate;
public double PresentValue;
public Trade Trade;
}
.
class ValuationMap : ClassMap<Valuation>
{
public ValuationMap()
{
WithTable("Valuations");
UseCompositeId()
.WithKeyProperty(x => x.ValueDate)
.WithKeyProperty(x => x.TradeId);
Map(x => x.PresentValue);
References(x => x.Trade, "TradeId")
.LazyLoad()
.Cascade.None()
.NotFound.Ignore()
.FetchType.Join();
}
}
class TradeMap : ClassMap<Trade>
{
public TradeMap()
{
WithTable("Trades");
Id(x => x.TradeId);
Map(x => x.InstrumentType);
Map(x => x.TradeDate);
Map(x => x.Valuations);
}
}
.
public List<Valuation> GetValuations(DateTime valueDate)
{
return (from p in _nhibernateSession.Linq<Valuation>()
where p.ValueDate == valueDate
select p).ToList();
}