Ich bin neu in NHibernate. Ich erhalte Select N + 1 Warnung, wenn ich meine Abfrage von NHibernate Profiler teste. Ich bin nicht sicher, was mache ich falsch mit meiner Zuordnung oder Abfrage.Erhalten von NHibernate Wählen Sie N + 1
Grundsätzlich habe ich eine Tabelle namens Header und es hat viele Details. Für jedes Detail habe ich eine Wiederholung. d.h
ein Header-> viele Details ein Detail -> ein Replay
Abfrage:
var query = _session.QueryOver(() => headerAlias)
.Where(() => headerAlias.ScriptNumber == scriptId)
.And(() => headerAlias.ChannelCode == channelId)
.Future<ProgramHeader>();
Meine Mapping:
public ProgramHeaderMap()
{
Table("S_IDB_M_PROG_HDR");
CompositeId()
.KeyProperty(x => x.ScriptNumber, "PROGCD")
.KeyProperty(x => x.ChannelCode, "CHCD");
Map(x => x.ChannelCode).Column("CHCD");
Map(x => x.ShowCode).Column("SHOWCD");
Map(x => x.ShowStartTime).Column("ONAIRSTART");
Map(x => x.ShowEndTime).Column("ONAIREND");
Map(x => x.Presenters).Column("HOST");
Map(x => x.Guests).Column("GUEST");
Map(x => x.Planners).Column("PLANNER");
Map(x => x.ModifiedTime).Column("UPDDATE");
HasMany(x => x.Pal)
.AsBag()
.Inverse()
.KeyColumns.Add("PROGCD", "CHCD")
.Cascade.All()
.Not.LazyLoad();
}
Detailkarte:
public ProgramDetailMap()
{
Table("S_IDB_M_PROG_DTL");
CompositeId()
.KeyProperty(x => x.ScriptNumber, "PROGCD")
.KeyProperty(x => x.ChannelCode, "CHCD")
.KeyProperty(x => x.ProductNumber, "PRODCD")
.KeyProperty(x => x.ColorCode, "COLORCD")
.KeyProperty(x => x.SizeCode, "SIZECD");
Map(x => x.PromoCode,"PCPARAM1");
Map(x => x.EasyPayInstalments,"EZINST");
Map(x => x.EasyPayFirstAmount,"EZAMT");
Map(x => x.EasyPayNextAmount,"EZAMT2");
Map(x => x.UpdatedDate).Column("UPDDATE");
References(x => x.ProgramHeader)
.Columns("PROGCD", "CHCD")
.LazyLoad();
References(x => x.Replay)
.Columns("PROGCD", "CHCD", "PRODCD", "COLORCD", "SIZECD")
.NotFound.Ignore();
}
}
Replay:
public ProgramReplayMap()
{
Table("S_IDB_M_PROG_REPL");
CompositeId()
.KeyProperty(x => x.ScriptNumber, "PROGCD")
.KeyProperty(x => x.ChannelCode, "CHCD")
.KeyProperty(x => x.ProductNumber, "PRODCD")
.KeyProperty(x => x.ColorCode, "COLORCD")
.KeyProperty(x => x.SizeCode, "SIZECD");
Map(x => x.Price, "REC_PRICE");
Map(x => x.Postage, "REC_POSTAGE");
Map(x => x.UpdatedDate).Column("UPDDATE");
}
eine Antwort für diese Abfrage zu schätzen wissen.
Dank
Verstehen Sie, was "SELECT N + 1" bedeutet? –
Ein bisschen. Angenommen, es gibt eine Sammlung von irgendeinem Objekt und jedes Objekt hat eine Sammlung von einem anderen Objekt, d. H. 1 zu vielen Relationen. SELECT N + 1 ist eine Auswahlabfrage für das Hauptobjekt und N zusätzlich auswählen, um die Sammlung abzurufen. Hoffe, das ist richtig –
Ich will nur wissen, ob meine Mappings richtig sind –