Frage

Ich habe eine sehr einfaches Land Einheit, die ich gecached werden soll. Das funktioniert perfekt, aber ich möchte ein Klon-Version des zwischengespeicherten Instanz zurückgegeben werden oder schreibgeschützt werden Entwickler zu verhindern, dass der Zustand der es zu ändern.

Wie würde ich das erreichen? Ich tought, dass die Fluent Read-only () Methode, um dies durchzusetzen wäre, aber es ist nicht der Fall.

Beispiel Fluent Mapping:

        Id(x => x.Id);
        Map(x => x.Name).WithLengthOf(50).Not.Nullable().Unique();
        Map(x => x.IsoCode).WithLengthOf(10).Not.Nullable().Unique();
        HasMany(x => x.States).Cascade.None().LazyLoad();          
        Cache.AsReadOnly();

Mein Unit-Test zeigt deutlich, dass die Entitäten im Cache gespeichert werden, und dass die gleiche Einheit zurückgegeben auf nachfolgende bekommt, aber ich mag das Objekt unveränderlich sein, sobald es aus dem persistenten Speicher geladen wird.

Danke!

War es hilfreich?

Lösung

Wenn Sie Instanzen Ihrer Klasse wollen unveränderlich sein (in dem Sinne, dass es unmöglich ist, Objektinstanzen zu ändern), dann müssen Sie Ihre Klasse schreiben nach - es ist nichts mit NHib oder Fluent NHib zu tun. Als Beispiel Karte NHib auf private Felder oder Privateigentum Setter und nur Eigentum Getter öffentlich aus.

Mit NHib ist es möglich, „wandelbar = false“ auf Ihrer Klassenzuordnung angeben (nicht sicher, wie dies zu tun mit FNH, sorry). Dies gilt nicht das Objekt unveränderlich zur Laufzeit machen, aber es funktioniert informieren NHib nicht für Einfügungen, Aktualisierungen zu prüfen und löscht gegen diese Einheiten.

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