2009-06-17 8 views
0

Griff Ich habe 2 Tabellen in meiner Datenbank:Wie würden Sie diese Situation mit nHibernate

  • Kategorie
  • Blogeintrag

Jeder BlogEntry hat 1 oder mehr Category s mit ihm verbunden ist.

Wenn ich eine BlogEntry durch seine ID erhalten möchte, möchte ich auch seine Category Informationen erhalten.

Vielleicht zeigt dieses Beispiel nicht genau ein Szenario, wo dies sinnvoll wäre, aber ich möchte nur die Category ID und den Namen laden, nicht alle anderen Spalten in der Kategorie-Datenbank.

Würde nHibernate alle Spalten/Eigenschaften für jede Entität laden?

Antwort

0

Es würde abhängig davon, wie Sie es zugeordnet. Anscheinend kann die Bitcode-Instrumentierung nur teilweise Tabellen abrufen, wird aber selten benötigt.

Vielleicht ein explainantion, warum Sie nur die ID der Kategorie wollen ...

Wenn Sie die Hibernate-Mappings definieren und stattdessen die Kategorie, die ein Unternehmen, das Objekt zu einer Kategorie Karten müssen es nur als Integer . So behandle ich meine Mappings, wenn es mir egal ist, ob ich die Anhänge mit meinen ursprünglichen Abfragen abrufen kann.

+0

Warum? Wie ich schon sagte, um nicht Spalten laden zu müssen, die ich nicht anzeigen muss. – Blankman

0

Sie möchten in Projektionen schauen. Wir verwenden den AliasToBean-Transformator, um NHibernate dazu zu bringen, unsere Projektionen direkt in ein bildschirmspezifisches DTO zu konvertieren.

1

Ich würde dies behandeln, indem Sie es als eine Eins-zu-viele-Verknüpfung zwischen BlogEntry und Kategorie zuordnen, so dass BlogEntry eine Sammlung von Category hat. Ich würde es so einstellen, dass die Kategorie-Sammlung lazy-loaded war. Es würde mich nicht interessieren, dass ich mehr Spalten lade, als ich anzeigen werde, weil ich mit Geschäftsobjekten arbeite und nach Primär- oder Fremdschlüssel wähle. Es ist die Aufgabe von NHibernate, sich darum zu kümmern, obwohl ich es während der Entwicklung mit SQL Profiler oder NHProf überprüfen würde.

NHibernate lädt die Sammlung, indem sie mithilfe des Fremdschlüssels aus BlogEntry Kategoriesätze auswählt. In fast allen Fällen gibt es keinen Leistungsgewinn, indem nur die Felder zurückgegeben werden, die Sie anzeigen. Das Abrufen von Geschäftsobjekten mit nur erforderlichen Eigenschaften, die basierend auf den Anzeigeanforderungen ausgefüllt werden, ist keine gute objektorientierte Vorgehensweise.

Verwandte Themen