2009-02-19 6 views
0

J'ai une installation assez simple de NHibernate: un objet Item qui a une collection d'objets ItemDetail. Relation un-à-plusieurs entre eux.NHibernate un-à-plusieurs

Dans mon application web, je suis à écrire du code similaire à:

item.Details.Add(new ItemDetail { Item = item, Text = "blah" }); 
itemRepos.Save(item); 

tout cela fonctionne bien. Cependant, maintenant j'écris une petite application de console pour faire quelques imports, réutilisant ma configuration et mappings de NHibernate, mais en exécutant le même code, ma tentative d'enregistrement fait qu'une exception est jetée m'avertissant que ItemDetail.Item contient null ou un transitoire article. Je suppose que cela signifie qu'il se plaint que ItemDetail.Item se réfère à un élément qui n'a pas encore été enregistré (l'objet n'est certainement pas nul), mais cela semble étrange car c'est exactement cet élément que je sauvegarde. Est-ce que je néglige quelque chose de trivial ici?

+0

Pouvez-vous nous montrer vos correspondances? Il semble qu'il vous manque un paramètre Cascade ou Inverse. –

Répondre

0

Il s'avère que le problème est que l'enregistrement de l'élément a échoué en raison d'une erreur de formatage de la date (erreur SQL), mais cela n'a pas été détecté. Ensuite, quand il a continué à enregistrer les ItemDetails, il se plaignait de l'élément n'est pas enregistré.

C'est un peu bizarre qu'il n'ait pas déclenché une exception à propos de l'erreur SQL, non?

0

Le niveau de détail que vous fournissez n'est pas vraiment suffisant pour savoir ce qui se passe.

Si je devais faire une supposition, cela a à voir avec les cascades et la relation bidirectionnelle entre l'élément et le détail. Vous avez probablement spécifié une règle de cascade dans le côté OneToMany de la relation, mais aucune dans le côté ManyToOne. Essayez d'ajouter une règle de cascade ici.