Wie zu implementieren richtig IUserType?
-
21-09-2019 - |
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?
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
Andere Tipps
können Sie wollen diese überprüfen Artikel . Es ist ein gutes Beispiel dafür, wie die IUserType Schnittstelle zu implementieren.