2

J'ai un système de numérisation de documents où plusieurs types de documents sont numérisés. Initialement, le document n'a aucune information lorsqu'il est scanné, puis ils sont classés et des informations supplémentaires sont saisies pour eux dans une seconde étape plus tard. Donc, j'ai une classe de base appelée Document, et des sous-classes pour chaque type avec leurs métadonnées respectives comme ci-dessous. Je l'ai installé comme un mappage de table par sous-classe (sous-classe jointe) dans NHibernate.Pouvez-vous passer d'une classe de base à un type de sous-classe joint 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. Récupérez ensuite dans une seconde étape plus tard et convertissez-le en un des types de sous-classes et remplissez le reste de ses informations. Quelle serait la meilleure approche pour le faire, et est-ce possible avec NHibernate? Si possible, je voudrais conserver le document original, mais ce n'est pas un dealbreaker si je dois le jeter.

Répondre

3

Malheureusement, NHibernate ne vous permet pas de basculer entre les sous-classes après la création initiale; Pour obtenir ce fonctionnement comme vous le souhaitez, vous disposez de 3 options:

  1. Utilisez un appel SQL natif pour modifier le discriminateur (et éventuellement) ajouter ou modifier des champs liés à la sous-classe.
  2. Copiez le contenu de votre objet dans un nouvel objet de la classe appropriée, puis supprimez l'original.
  3. N'utilisez pas de sous-classes, contrôlez l'état de votre objet via une énumération ou un autre mécanisme qui vous permet de déterminer leur type lors de l'exécution.
2

Ce problème a déjà été évoqué here. J'irais avec le conseil de Terry Wilcox d'utiliser un rôle pour cela. Composition sur l'héritage.

+0

Excellent exemple; manqué cet article +1 – DanP