Frage

Ich brauche eine benutzerdefinierter Typ für NHibernate durch eine neue Mapper-Klasse zu schreiben, dass Geräte IUserType. Während es relativ einfach ist, die meisten Methoden und Eigenschaften außer Kraft zu setzen, habe ich einige Schwierigkeiten bekommen, zu verstehen, wie man richtig mit den folgenden Mitgliedern behandeln:

  • object Assemble(object cached, object owner);
  • object DeepCopy(object value);
  • object Disassemble(object value);
  • object Replace(object original, object target, object owner);

Ich verstehe nicht, was genau ihr Zweck ist; und noch wichtiger ist, wie man richtig um sie umzusetzen. Die meisten Beispiele kehre ich gesehen habe nur den Roh-Eingangsparameter.

public object DeepCopy(object value)
{
    return value;
}

public object Replace(object original, object target, object owner)
{
    return original;
}

public object Assemble(object cached, object owner)
{
    return cached;
}

public object Disassemble(object value)
{
    return value;
}

Wie diese Methoden korrekt umzusetzen in einem realen Fall oder komplexere Szenario?

War es hilfreich?

Lösung

Haben Sie einen Blick an, wie Ritesh Rao hat dies getan, in seinen NCommon Rahmen:

Die MoneyUserType Geräte ein Basisklasse genannt CompositeUserTypeBase

Es gibt mehr Details in den Kommentaren aber zusammenfassen:

  • deep - sollte eine tiefe Kopie des persistenten Zustand zurückkehren, in Organisationen und in Sammlungen zu stoppen
  • Disassemble - verwandelt sich das Objekt in seine "zwischenspeicherbar Vertretung (das heißt Verbände müssen als Bezeichner Werte zwischengespeichert werden)
  • Bauen - rekonstruiert ein Objekt aus dem Cache gespeichert werden Darstellung

Es ist in viel mehr Detail hier erklärt

Andere Tipps

können Sie wollen diese überprüfen Artikel . Es ist ein gutes Beispiel dafür, wie die IUserType Schnittstelle zu implementieren.

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