Ce qui suit est une simplification de mon domaine de problème. Nous avons une série de Trades, qui obtient chacun un record en Évaluations tous les jours ouvrables.NHibernate fluide exécute des sélections sur une seule ligne sur des milliers d'objets à lier aux parents
Nous filtrons nos Valorisations Liste utilisé pour un jour, mais pour alimenter le commerce contre chacune des évaluation lignes, NHibernate feux seule rangée sélectionne les métiers tables pour environ 50k lignes dans la tableau d'évaluation. Comment puis-je changer cela afin que NHibernate fasse une sélection unique sur la table des négociations?
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();
}