2 Stimmen

NHibernate: Abbildung verschiedener dynamischer Komponenten auf der Grundlage eines Unterscheidungsmerkmals

Meine Domänenentitäten haben jeweils einen Satz "fester" Eigenschaften und einen Satz "dynamischer" Eigenschaften, die zur Laufzeit hinzugefügt werden können. Ich verwende dazu die dynamische Komponentenfunktion von NHibernate.

public class Product {
  public virtual Guid Id { get; }
  public virtual string Name { get; set;}
  public virtual IDictionary DynamicComponents { get; }
}

Jetzt habe ich die folgende Situation

public class Customer {
  public virtual Guid Id { get; }
  public virtual string Type { get; set;}
  public virtual IDictionary DynamicProperties { get; }
}

Wobei ein CustomerType etwas ist wie "Online" o "InPerson" . Außerdem hat ein Online-Kunde dynamische Eigenschaften "Name" et "IPAdresse" und ein InPerson-Kunde hat dynamische Eigenschaften "Name" et "Geschäftsmann" .

Welche Kundentypen verfügbar sind und welche zusätzlichen Eigenschaften sie haben, wird in den Metadaten konfiguriert, die beim Start der Anwendung zur Erzeugung von hbm-Dateien verwendet werden.

Ich könnte einen Weg finden, dies mit einer DTO-Zwischenschicht zusammenzufügen, aber gibt es in NHibernate irgendeine Unterstützung für dieses Szenario? Die einzige Schwierigkeit scheint zu sein, dass alle verschiedenen "Typen" von Kunden auf dieselbe Kundenklasse abgebildet werden.

0voto

Fried Hoeben Punkte 3182

Vielleicht eine dumme Frage, aber warum verwenden Sie nicht einfach zwei Unterklassen von Customer?

Abgesehen davon ist mir nicht sofort klar, was NHibernate unterstützen soll. Können Sie klarstellen, was "jegliche Unterstützung in NHibernate für dieses Szenario" bedeutet, was NHibernate für Sie tun soll?

0voto

Itamar Punkte 81

Ich denke, Sie können eine Lösung mit den dynamischen Eigenschaften finden... in Ihren Unterklassen, beziehen sich auf die dynamischen Eigenschaften wie IPAddress { get { return DynamicProperties["ipAddress"] as IPAddress; } }

Interessant ist für mich die Frage, wie man diese Eigenschaften so abbilden kann, dass sie skalierbar sind...

Haben Sie eine andere Lösung gefunden?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X