J'ai un nouvel objet avec une collection de nouveaux objets en son sein sur une propriété en tant que IList. Je vois à travers sql profiler deux requêtes d'insertion en cours d'exécution .. une pour le parent, qui a le nouvel id guid, et une pour l'enfant, cependant, la clé étrangère sur l'enfant qui référence le parent, est un guid vide. Voici ma carte sur le parent:Pourquoi ma collection de sacs NHibernate ne règle-t-elle pas dynamiquement l'identité parent des enfants?
<id name="BackerId">
<generator class="guid" />
</id>
<property name="Name" />
<property name="PostCardSizeId" />
<property name="ItemNumber" />
<bag name="BackerEntries" table="BackerEntry" cascade="all" lazy="false" order-by="Priority">
<key column="BackerId" />
<one-to-many class="BackerEntry" />
</bag>
Sur la classe Backer.cs, je définissais la propriété BackerEntries comme
IList<BackerEntry>
Lorsque je tente de saveOrUpdate le passé dans l'entité que je reçois les résultats suivants dans sql profileur:
exec sp_executesql N'INSERT DANS Backer (Nom, PostCardSizeId, ItemNumber, BackerId) VALEURS (@ p0, @ p1, @ p2, @ p3), N '@ p0 nvarchar (3), @ p1 uniqueidentifier , @ p2 nvarchar (3), @ p3 identifiant unique ', @ p0 = N'qaa', @ p1 = 'BC95E7EB-5EE8-44B2-82FF3 0F5176684D '@ p2 = N'qaa', @ p3 = '18FBF8CE-FD22-4D08-A3B1-63D6DFF426E5'
exec sp_executesql N'INSERT EN BackerEntry (BackerId, BackerEntryTypeId, Nom, Description, MaxLength, IsRequired, priorité , BackerEntryId) VALEURS (@ p0, @ p1, @ p2, @ p3, @ p4, @ p5, @ p6, @ p7) ', N' @ p0 uniqueidentifier, @ p1 uniqueidentifier, @ p2 nvarchar (5), @ p3 nvarchar (5), @ p4 int, @ p5 bits, @ p6 int, @ p7 identificateur unique ', @ p0 =' 00000000-0000-0000-0000-000000000000 ', @ p1 =' 2C5BDD33-5DD3-42EC-AA0E-F1E548A5F6E4 ', @ p2 = N'qaadf', @ p3 = N'wasdf ', @ p4 = 0, @ p5 = 1, @ p6 = 0, @ p7 =' FE9C4A35-6211-4E17-A75A-60CCB526F1CA '
Comme vous pouvez le voir, il ne réinitialise pas le guid vide pour BackerId sur l'enfant au nouveau guid réel du parent.
Enfin, le jet d'exception est:
"NHibernate.Exceptions.GenericADOException: could not insert: [CB.ThePostcardCompany.MiddleTier.BackerEntry][SQL: INSERT INTO BackerEntry (BackerId, BackerEntryTypeId, Name, Description, MaxLength, IsRequired, Priority, BackerEntryId) VALUES (?, ?, ?, ?, ?, ?, ?, ?)] ---\u003e System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint
EDIT: RESOLU! La première réponse ci-dessous m'a indiqué la bonne direction. J'avais besoin d'ajouter cette référence arrière sur le mappage de l'enfant et la classe. Cela lui a permis de travailler de manière purement .net - cependant, en acceptant json, il y avait une déconnexion, donc j'ai dû trouver un code original pour "ré-attacher" les enfants.
Merci .. Vous m'a indiqué dans la bonne direction ... Je n'avais pas la référence arrière dans ma cartographie enfantine. – EvilSyn