NHibernate: Erreur de la déshydratation de la propriété - Que diable est-ce?

Je suis en train de faire une assez complexe NHibernate de transaction dans le système financier, la création d'un paiement, l'enregistrement des écritures comptables, la vérification pour voir si le paiement est le montant total d'une facture, si le marquage de la facture comme payée dans son intégralité, etc... beaucoup de choses amusantes. Naturellement, il doit se passer à l'intérieur d'une transaction unique.

Quand j'essaie de valider la modification de la session, j'obtiens l'erreur suivante:

Error dehydrating property value for C3.DataModel.CFAPTransaction.Vendor

Googler cela n'a pas beaucoup de record. Quelqu'un peut me dire ce que cela signifie et où je dois concentrer mes efforts de débogage?

Mise à JOUR

Par demande, voici le message d'erreur complet:

NHibernate.PropertyValueException: Error dehydrating property v  alue for C3.DataModel.CFAPTransaction.Vendor --->

NHibernate.HibernateException: Impossible de résoudre la propriété: APVendorId
au NHibernate.N-uplet.De l'entité.EntityMetamodel.GetPropertyIndex(String
propertyName) à
NHibernate.N-uplet.De l'entité.AbstractEntityTuplizer.GetPropertyValue () (Objet
entité, Chaîne propertyPath) à
NHibernate.Persister.De l'entité.AbstractEntityPersister.GetPropertyValue () (Objet
obj, String propertyName, EntityMode entityMode) à
NHibernate.Type.EntityType.GetIdentifier(la valeur de l'Objet,
ISessionImplementor session) à
NHibernate.Type.ManyToOneType.NullSafeSet () (IDbCommand st, la valeur de l'Objet,
Int32 index, Boolean[] réglable, ISessionImplementor session) à
NHibernate.Persister.De l'entité.AbstractEntityPersister.Déshydrater(Objet
id, Object[] champs, Objet rowId, Boolean[] includeProperty,
Boolean[][] includeColumns, Int32 table, IDbCommand déclaration,
ISessionImplementor session, Int32 index) --- Fin de l'exception interne
trace de la pile --- à
NHibernate.Persister.De l'entité.AbstractEntityPersister.Déshydrater(Objet
id, Object[] champs, Objet rowId, Boolean[] includeProperty,
Boolean[][] includeColumns, Int32 table, IDbCommand déclaration,
ISessionImplementor session, Int32 index) à
NHibernate.Persister.De l'entité.AbstractEntityPersister.Insert(id de l'Objet,
Object[] champs, Boolean[] notNull, Int32 j, SqlCommandInfo sql,
Objet obj, ISessionImplementor session) à
NHibernate.Persister.De l'entité.AbstractEntityPersister.Insert(id de l'Objet,
Object[] champs, Object obj, ISessionImplementor session) à
NHibernate.D'Action.EntityInsertAction.Execute() à
NHibernate.Moteur.ActionQueue.Execute(IExecutable exécutable) à
NHibernate.Moteur.ActionQueue.ExecuteActions(IList liste) à
NHibernate.Moteur.ActionQueue.ExecuteActions() à
NHibernate.De l'événement.Par défaut.AbstractFlushingEventListener.PerformExecutions(IEventSource
session) à
NHibernate.De l'événement.Par défaut.DefaultFlushEventListener.OnFlush(FlushEvent
de l'événement) à NHibernate.Impl.SessionImpl.Flush() à
NHibernate.Des transactions.AdoTransaction.Commit() à
C3.DataModel.Les référentiels.NHUnitOfWork.Save() dans
C:\projets\C3\C3.DataModel.Généré\Généré\NHibernateRepositories.généré.cs:ligne
2659 à
C3.L'interface utilisateur web.Les zones.Finances.Les contrôleurs.AccountsPayableController.CreatePayment(CreatePaymentModel
modèle)
C:\projets\C3\C3.WebUI\Zones\Finance\Controllers\AccountsPayableController.cs:ligne
434

Mise à JOUR
Jeter NHibernate en mode DEBUG, je reçois un tas de trucs de ce genre:

de traitement de la cascade
NHibernate.Moteur.CascadingAction+SaveUpdateCascadingAction pour:
C3.DataModel.APVendor
cascade de NHibernate.Moteur.CascadingAction+SaveUpdateCascadingAction pour
collection: C3.DataModel.APVendor.Les Transactions
fait cascade de NHibernate.Moteur.CascadingAction+SaveUpdateCascadingAction pour
collection: C3.DataModel.APVendor.Les Transactions
fait de traitement de la cascade de NHibernate.Moteur.CascadingAction+SaveUpdateCascadingAction pour:
C3.DataModel.APVendor
NHibernate.De l'événement.Par défaut.AbstractFlushingEventListener ERREUR: impossible de synchroniser la base de données d'état de session
NHibernate.PropertyValueException: Erreur de déshydratation valeur de la propriété pour C3.DataModel.CFAPTransaction.Vendeur --->
NHibernate.HibernateException: Impossible de résoudre la propriété: APVendorId
au NHibernate.N-uplet.De l'entité.EntityMetamodel.GetPropertyIndex(String
propertyName) à
NHibernate.N-uplet.De l'entité.AbstractEntityTuplizer.GetPropertyValue () (Objet
entité, Chaîne propertyPath) à
NHibernate.Persister.De l'entité.AbstractEntityPersister.GetPropertyValue () (Objet
obj, String propertyName, EntityMode entityMode) à
NHibernate.Type.EntityType.GetIdentifier(la valeur de l'Objet,
ISessionImplementor session) à
NHibernate.Type.ManyToOneType.NullSafeSet () (IDbCommand st, la valeur de l'Objet,
Int32 index, Boolean[] réglable, ISessionImplementor session) à
NHibernate.Persister.De l'entité.AbstractEntityPersister.Déshydrater(Objet
id, Object[] champs, Objet rowId, Boolean[] includeProperty,
Boolean[][] includeColumns, Int32 table, IDbCommand déclaration,
ISessionImplementor session, Int32 index) --- Fin de l'exception interne
trace de la pile --- à
NHibernate.Persister.De l'entité.AbstractEntityPersister.Déshydrater(Objet
id, Object[] champs, Objet rowId, Boolean[] includeProperty,
Boolean[][] includeColumns, Int32 table, IDbCommand déclaration,
ISessionImplementor session, Int32 index) à
NHibernate.Persister.De l'entité.AbstractEntityPersister.Insert(id de l'Objet,
Object[] champs, Boolean[] notNull, Int32 j, SqlCommandInfo sql,
Objet obj, ISessionImplementor session) à
NHibernate.Persister.De l'entité.AbstractEntityPersister.Insert(id de l'Objet,
Object[] champs, Object obj, ISessionImplementor session) à
NHibernate.D'Action.EntityInsertAction.Execute() à
NHibernate.Moteur.ActionQueue.Execute(IExecutable exécutable) à
NHibernate.Moteur.ActionQueue.ExecuteActions(IList liste) à
NHibernate.Moteur.ActionQueue.ExecuteActions() à
NHibernate.De l'événement.Par défaut.AbstractFlushingEventListener.PerformExecutions(IEventSource
session)
C3.L'interface utilisateur web.Les zones.Finances.Les contrôleurs.AccountsPayableController ERREUR C3.L'interface utilisateur web.Les zones.Finances.Les contrôleurs.AccountsPayableController:
Aucune information supplémentaire.
NHibernate.PropertyValueException: Erreur de déshydratation valeur de la propriété pour C3.DataModel.CFAPTransaction.Vendeur --->
NHibernate.HibernateException: Impossible de résoudre la propriété: APVendorId
au NHibernate.N-uplet.De l'entité.EntityMetamodel.GetPropertyIndex(String
propertyName) à
NHibernate.N-uplet.De l'entité.AbstractEntityTuplizer.GetPropertyValue () (Objet
entité, Chaîne propertyPath) à
NHibernate.Persister.De l'entité.AbstractEntityPersister.GetPropertyValue () (Objet
obj, String propertyName, EntityMode entityMode) à
NHibernate.Type.EntityType.GetIdentifier(la valeur de l'Objet,
ISessionImplementor session) à
NHibernate.Type.ManyToOneType.NullSafeSet () (IDbCommand st, la valeur de l'Objet,
Int32 index, Boolean[] réglable, ISessionImplementor session) à
NHibernate.Persister.De l'entité.AbstractEntityPersister.Déshydrater(Objet
id, Object[] champs, Objet rowId, Boolean[] includeProperty,
Boolean[][] includeColumns, Int32 table, IDbCommand déclaration,
ISessionImplementor session, Int32 index) --- Fin de l'exception interne
trace de la pile --- à
NHibernate.Persister.De l'entité.AbstractEntityPersister.Déshydrater(Objet
id, Object[] champs, Objet rowId, Boolean[] includeProperty,
Boolean[][] includeColumns, Int32 table, IDbCommand déclaration,
ISessionImplementor session, Int32 index) à
NHibernate.Persister.De l'entité.AbstractEntityPersister.Insert(id de l'Objet,
Object[] champs, Boolean[] notNull, Int32 j, SqlCommandInfo sql,
Objet obj, ISessionImplementor session) à
NHibernate.Persister.De l'entité.AbstractEntityPersister.Insert(id de l'Objet,
Object[] champs, Object obj, ISessionImplementor session) à
NHibernate.D'Action.EntityInsertAction.Execute() à
NHibernate.Moteur.ActionQueue.Execute(IExecutable exécutable) à
NHibernate.Moteur.ActionQueue.ExecuteActions(IList liste) à
NHibernate.Moteur.ActionQueue.ExecuteActions() à
NHibernate.De l'événement.Par défaut.AbstractFlushingEventListener.PerformExecutions(IEventSource
session) à
NHibernate.De l'événement.Par défaut.DefaultFlushEventListener.OnFlush(FlushEvent
de l'événement) à NHibernate.Impl.SessionImpl.Flush() à
NHibernate.Des transactions.AdoTransaction.Commit() à
C3.DataModel.Les référentiels.NHUnitOfWork.Save() dans
C:\projets\C3\C3.DataModel.Généré\Généré\NHibernateRepositories.généré.cs:ligne
2659 à
C3.L'interface utilisateur web.Les zones.Finances.Les contrôleurs.AccountsPayableController.CreatePayment(CreatePaymentModel
modèle)
C:\projets\C3\C3.WebUI\Zones\Finance\Controllers\AccountsPayableController.cs:ligne
434

Il ne semble pas ce qui se passe lors de l'interrogation de la base de données. J'ai le sentiment qu'il a des problèmes avec moi à créer un tas d'objets, en les reliant, et d'essayer ensuite de les conserver, mais c'est une pure supposition.

  • Quelle est la pleine exception, et s'il y a une exception interne?
  • qu'en est Incapable de résoudre la propriété: APVendorId, est - ce que vous donner un indice? La cartographie est mal? Le NHUnitOfWork.Save() est en train d'essayer d'écrire dans une colonne et est à la recherche d'une Propriété appelée APVendorId.
  • Il ne semble pas être mauvais. L'individu dépôts semblent à réaliser et construire correctement. Le schéma généré semble correcte.
  • Essayez de mettre un générateur de profils SQL et aussi l'augmentation de la journalisation dans NHibernate. Je trouve que la plupart des problèmes avec NHiberate sont résolus à l'aide d'indices, il est étonnant d'enregistrement (log4net). Voir ce que SQL est généré et ce NHiberate attend..
  • Si c'est le cas, je voudrais réduire la taille du graphe de la save jusqu'à ce qu'il fonctionne et de travailler vers l'arrière. En cas d'échec - j'ai peut-être même l'nhibernate la source. Mais à ce stade, si tout ce que vous faites est de créer un graphe d'objets, alors il pourrait être temps pour simplifier graphique et de s'essayer à un peu de temps.
  • Quelle est la version de NHibernate est-ce? Il y a diverses questions dans NH 2.0 avec le fournisseur Linq et les différents types de projection (c'est à dire de la composante).
  • C'est 3.2, non fluide.