Domanda

Ho sistema di scansione del documento in cui vengono esaminati diversi tipi di documenti. Inizialmente, il documento non ha informazioni quando la sua scansione, poi ottengono classificati e informazioni aggiuntive vengono inseriti per loro in una seconda fase successiva. Così, ho una classe di base denominata Documento, e sottoclassi per ogni tipo con i rispettivi metadati come qui di seguito. Ce l'ho messa a punto come una mappatura tabella per sottoclasse (sottoclasse uniti) 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
}

Quello che ho bisogno di essere in grado di fare è creare una classe primo documento e salvarlo. Quindi recuperare in una seconda fase più tardi e convertirlo in uno dei tipi di sottoclasse e compilare il resto delle sue informazioni. Quale sarebbe il metodo migliore per fare questo, ed è questo anche possibile con NHibernate? Se possibile vorrei mantenere il record di documento originale, ma non è un grosso problema, almeno se devo getto esso.

È stato utile?

Soluzione

Purtroppo, NHibernate non consente di passare tra le sottoclassi dopo la creazione iniziale; per ottenere questo lavoro nel modo desiderato, si hanno 3 opzioni:

  1. Utilizza una chiamata SQL nativo per modificare il discriminatore (e possibilmente) aggiungere o modificare i campi sottoclasse-correlato.
  2. Copiare il contenuto del vostro oggetto ad un nuovo oggetto della classe corretta e quindi eliminare l'originale.
  3. Non utilizzare sottoclassi, controllare lo stato del vostro oggetto attraverso un'enumerazione o qualche altro meccanismo che consente di determinare il loro tipo in fase di esecuzione.

Altri suggerimenti

Il problema è già stato discusso qui . Vorrei andare con la punta di Terry Wilcox di utilizzare un ruolo per questo. Composizione per l'eredità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top