Pregunta

Tengo sistema de escaneo de documentos, donde se escanean varios tipos de documentos. Inicialmente, el documento no tiene información cuando su escaneado, y después consiguen clasifican y se introduce información adicional para ellos en un segundo paso posterior. Por lo tanto, tengo una clase base llamada de documento y subclases para cada tipo con sus respectivos metadatos, como a continuación. Lo tengo configurado como un mapeo tabla-por-subclase (subclase unido) en 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
}

Lo que usted debe ser capaz de hacer es crear una clase de documento y guardarlo primero. A continuación, recuperar en un segundo paso más adelante y convertirlo en uno de los tipos de subclases y rellenar el resto de su información. ¿Cuál sería la mejor manera de hacer esto, y es esto posible con NHibernate? Si es posible me gustaría conservar el registro del documento original, pero no es un motivo de ruptura si tengo que jettison él.

¿Fue útil?

Solución

Por desgracia, NHibernate no le permite cambiar entre las subclases después de la creación inicial; para conseguir esto funcione de la manera que desea, usted tiene 3 opciones:

  1. Usar una llamada SQL nativa para cambiar el discriminador (y posiblemente) agregar o cambiar cualquiera de los campos de subclase relacionada.
  2. Copiar el contenido de su objeto a un nuevo objeto de la clase apropiada y luego eliminar el original.
  3. No utilice subclases, controlar el estado de su objeto a través de una enumeración o algún otro mecanismo que le permite determinar su tipo en tiempo de ejecución.

Otros consejos

Este problema ya ha sido discutido aquí . Me gustaría ir con la punta de Terry Wilcox utilizar un papel de esta. Composición sobre la herencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top