Warum ist nicht meine NHibernate-Tasche-Sammlung ist die Einstellung des parent-id' der Kinder dynamisch?

Habe ich ein neues Objekt mit einer Sammlung von neuen Objekten innerhalb es auf einer Eigenschaft als IList. Ich sehe durch die sql-profiler-zwei insert-Abfragen ausgeführt wird.. eines für die Eltern, die die neue guid id, und eine für das Kind aber, den foreign-key auf das Kind, das auf die Muttergesellschaft, ist eine leere guid. Hier ist mein mapping auf die Eltern:

<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> 

Auf die Unterstützer.cs-Klasse, ich BackerEntries Eigenschaft als

IList<BackerEntry>

Wenn ich versuche, SaveOrUpdate die übergebene Entität, bekomme ich die folgenden Ergebnisse in sql profiler:

exec sp_executesql N'INSERT IN Backer (Name, PostCardSizeId, ItemNumber, BackerId) VALUES (@p0, @p1, @p2, @p3)',N'@p0 nvarchar(3),@p1 uniqueidentifier,@p2 nvarchar(3),@p3
uniqueidentifier',@p0=N'qaa',@p1='BC95E7EB-5EE8-44B2-82FF30F5176684D',@p2=N'qaa',@p3='18FBF8CE-FD22-4D08-A3B1-63D6DFF426E5'

exec sp_executesql N'INSERT IN BackerEntry (BackerId, BackerEntryTypeId, Name, Beschreibung, MaxLength, IsRequired, Priorität, BackerEntryId) VALUES (@p0, @p1, @p2, @p3, @p4, @p5 @p6, @p7)',N'@p0 uniqueidentifier,@p1 uniqueidentifier,@p2 vom Datentyp nvarchar(5),@p3 vom Datentyp nvarchar(5),@p4 int,@p5 bit,@p6 int,@p7 uniqueidentifier',@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'

Wie Sie sehen können, es ist nicht das zurücksetzen der leere guid für BackerId auf das Kind, um das neue real-guid der übergeordneten Ebene.

Schließlich die Ausnahme zu werfen ist:

"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: GELÖST! Die erste Antwort unten wies mich in die richtige Richtung. Ich brauchte, um hinzuzufügen, dass der Rückverweis auf das Kind mapping und Klasse. So wurde es möglich, die Arbeit in einen rein .Netz Weg - aber, wenn die Annahme json, gab es einen disconnect also ich hatte zu kommen mit einigen schrulligen code zu "re-attach' der Kinder.

InformationsquelleAutor EvilSyn | 2008-09-28
Schreibe einen Kommentar