Frage

Ich habe Dokumentabtastsystem, wo verschiedene Arten von Dokumenten gescannt werden. Zunächst muss das Dokument keine Information, wenn seine gescannt, dann werden sie klassifiziert und zusätzliche Informationen werden später für sie in einem zweiten Schritt eingegeben. Also, ich habe eine Basisklasse namens Dokuments, und Unterklassen für jeden Typen mit ihren jeweiligen Metadaten wie unten. Ich habe es Setup als Tabelle pro Unterklasse (verbundene Unterklasse) Mapping in NHibernate.

public class Document
{
   public int ID { get; set; }
   public string FilePath { get; set; }
}

public class Certificate : Document
{
   // certificate-specific fields
}

public class Correspondence : Document
{
   // correspondence-specific fields
}

Was muss ich in der Lage sein zu tun, um eine Dokumentenklasse erstellen erste und speichern. Dann holt in einem zweiten Schritt später und wandelt es in einer der Unterklasse Typen und Füllung im Rest seiner Informationen. Was wäre der beste Ansatz, um dies zu tun, und das ist sogar möglich, mit NHibernate? Wenn möglich würde Ich mag das Originaldokument Rekord halten, aber es ist nicht ein dealbreaker, wenn ich über Bord werfen haben es.

War es hilfreich?

Lösung

Leider ist NHibernate nicht zulassen, dass Sie zwischen Unterklassen nach der Erstellung schalten; diese Arbeit, wie Sie wollen zu bekommen, haben Sie 3 Möglichkeiten:

  1. Verwenden Sie einen nativen SQL-Aufruf den Diskriminator ändern (und möglicherweise) hinzufügen oder Unterklasse bezogene Felder ändern.
  2. Kopieren Sie den Inhalt des Objekts auf ein neues Objekt der richtigen Klasse und dann das Original löschen.
  3. Do not Subklassen verwenden, steuert den Zustand des Objekts durch eine Aufzählung oder einen anderen Mechanismus, dass Sie ihre Art zur Laufzeit bestimmt werden.

Andere Tipps

Dieses Problem wurde bereits diskutiert hier . Ich würde mit Terry Wilcox Tipp geht eine Rolle für diesen Einsatz. Komposition der Vererbung.

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