Frage

Ich möchte einige vordefinierte Abfragen ohne roundrips zur Datenbank in NHibernate verwenden.

Im Grunde würde Ich mag Code wie diese haben:

public class Countries
{
  static Countries() {
    Australia = new Country
      {
          Id = 14,
          Description = "Australia"
      }
  }
  public static Country Austrlia { get; protected set }
}

Dann ist dieser Code-Schnipsel schreiben:

address.Country = Countries.Australia;// Snippet1
if (address.Country == Countries.Australia) { // Snippet2
  // Do something
}

Also ich überschreiben Equals, GetHashCode und sogar Überlastung Operatoren == und! = Für Country Klasse Lookup.

Die Snippet1 funktioniert nur, wenn das Land mit gegebener Id wurde in dem Speicher nicht geladen. Ansonsten wirft es NonUniqueObjectException das Objekt mit gegebenen Id sagen will, ist bereits im Speicher.

Um workaraound das ich das geladene Land zu vertreiben und dann den Nachschlag-Wert zuweisen. Das fühlt sich falsch und ich bin mir nicht sicher, was passieren wird, wenn die Abfrage für Land-Lookup wieder ausgeführt wird.

Die Frage ist also: Wie statische Lookup-Klassen in NHibernate halten

Danke, Dmitriy.

War es hilfreich?

Lösung 2

Es scheint, NHibernate kann nicht zwei Objekte verarbeiten logisch die gleichen (aber verschiedene Instanzen).
Also statt „statische Lookup“ mit Datenbank-Lookups Mischen ist es besser, nur einen von ihnen zu verwenden.

In meinem Fall - Lookups in der Datenbank gespeichert. Aber um Folgendes zu bieten, um die Datenbank zu vermeiden, nur um zu erhalten, das Objekt nur Last benötigt wird, statt Get zu verwenden:

address.Country = Session.Load<Country>(CountryIds.Australia); // This does not hit DB
address.Country = Session.Get<Country>(CountryIds.Australia); // This DOES hit DB

Andere Tipps

Überprüfen Sie heraus, was wir Enumeration Klassen ..

Es ist im Grunde die Fliegengewicht Muster.

Sie können sie bestehen bleiben, eine IUserType Implementierung verwendet wird, als Wert oder den Anzeigenamen.

Wir tun verrückte Sachen mit ihnen. Wie bieten Auto-genned Lookup-Tabellen mit Fremdschlüsseln für DBA Leute während alle Werte in Code zu halten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top