Mise à jour: réécrite réponse
Apparemment, bien que je ne parviens pas à trouver la source définitive sur ce point, est la classe réelle importante. Cela a du sens, si vous considérez que NHibernate utilise la réflexion pour trouver le type sous-jacent. En outre, lorsque le mapping est chargé, il décore vos types, donc fondamentalement ils deviennent des types complètement différents (vous pouvez le voir quand vous passez la souris dessus pendant le débogage).
Ce principe empêche fondamentalement le mapping de downcast d'héritage, puisque votre type dérivé n'est pas mappé, il n'est pas décoré et n'est donc pas connu. Si vous devez utiliser l'héritage, vous avez quelques options:
- Faire un mappage pour la classe dérivée
- Ajouter un convertisseur pour votre classe pour copier d'un type dans l'autre (fonte ne suffit pas, il ne changera pas l'objet sous-jacent)
- utilisation ICloneable
Toutes ces méthodes sont assez lourdes. Si votre conception le permet, au lieu de l'héritage, utilisez des classes partielles ou des méthodes d'extension. Ce dernier est ce que je trouve dans mes propres projets, apparemment je me suis heurté à cela auparavant et j'ai pris l'habitude d'utiliser des méthodes d'extension.
C'est la même chose que ce que j'ai .... J'ai moulé B à A mais je reçois toujours la même erreur: Pas de persister pour B – John
J'ai réécrit la réponse, j'étais un peu trop rapide. – Abel
Cette réponse a beaucoup aidé, même après 1,5 ans :) – SadullahCeran