Question

J'ai documents système de balayage où sont analysés plusieurs types de documents. Dans un premier temps, le document n'a pas d'informations lorsque son numérisé, puis ils sont classés et des informations supplémentaires sont saisies pour eux dans une seconde étape ultérieure. Donc, j'ai une classe de base appelée document, et les sous-classes pour chaque type avec leurs métadonnées respectives comme ci-dessous. Je l'ai configuré comme une application table par la sous-classe (sous-classe jointe) dans 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
}

Ce que je dois être en mesure de faire est de créer une classe de premier document et l'enregistrer. Ensuite, récupérer dans une deuxième étape plus tard et le convertir en l'un des types de sous-classe et remplir le reste de ses informations. Que serait la meilleure approche pour ce faire, et est-ce possible avec NHibernate? Si possible, je voudrais conserver le dossier de document original, mais ce ne est pas un dealbreaker si je dois larguer il.

Était-ce utile?

La solution

Malheureusement, NHibernate ne vous permet pas de basculer entre les sous-classes après sa création initiale; pour obtenir ce travail comme vous le souhaitez, vous avez 3 options:

  1. Utilisez un appel sql natif pour changer le discriminateur (et éventuellement) ajouter ou modifier les champs liés à la sous-classe.
  2. Copiez le contenu de votre objet à un nouvel objet de la classe et puis supprimez l'original.
  3. Ne pas utiliser les sous-classes, contrôler l'état de votre objet à travers une énumération ou un autre mécanisme qui vous permet de déterminer leur type lors de l'exécution.

Autres conseils

Cette question a déjà été discutée ici . J'irais avec la pointe de Terry Wilcox utiliser un rôle à cet égard. Composition de l'héritage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top