Warum legt meine NHibernate-Taschenkollektion die Eltern-ID der Kinder nicht dynamisch fest?

8

Ich habe ein neues Objekt mit einer Sammlung neuer Objekte darin auf einer Eigenschaft als IList. Ich sehe durch SQL Profiler zwei Insert-Abfragen ausgeführt werden .. eine für die Eltern, die die neue GUID-ID hat, und eine für das Kind, jedoch der Fremdschlüssel auf das Kind, das auf die Eltern verweist, ist eine leere GUID. Hier ist meine Zuordnung auf dem Eltern:

%Vor%

In der Backer.cs-Klasse habe ich die BackerEntries-Eigenschaft als

definiert %Vor%

Wenn ich versuche, die übergebene Entität zu speichern, bekomme ich folgende Ergebnisse in sql profiler:

exec sp_executesql N'INSERT INBACKER (Name, PostCardSizeId, ItemNumber, BackerId) VALUES (@ p0, @ p1, @ p2, @ p3) ', N' @ p0 nvarchar (3), @ p1 eindeutige Kennung, @ 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 eindeutige Kennung, @ p1 eindeutige Kennung, @ p2 nvarchar (5), @ p3 nvarchar (5), @ p4 int, @ p5 Bit, @ p6 int, @ p7 eindeutige Kennung ', @ 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, wird die leere GUID für BackerId auf dem Kind nicht auf die neue echte GUID des Elternelements zurückgesetzt.

Schließlich ist der Ausnahme-Wurf:

%Vor%

BEARBEITEN: Gelöst! Die erste Antwort unten zeigte mir die richtige Richtung. Ich musste diese Rückreferenz für das Kind-Mapping und die Klasse hinzufügen. Dies ermöglichte es, auf rein net-Art zu arbeiten - jedoch, als ich json akzeptierte, gab es eine Trennung, so dass ich einen schrulligen Code entwickeln musste, um die Kinder wieder zu verbinden.

    
EvilSyn 28.09.2008, 20:01
quelle

2 Antworten

9

Möglicherweise müssen Sie Ihrer Zuordnungsklasse NOT-NULL="true" hinzufügen:

%Vor%

und stellen Sie sicher, dass Sie das umgekehrte Mapping für die untergeordnete Klasse haben:

%Vor%

Ich hatte ähnliche Probleme mit Hibernate in meinem aktuellen Projekt mit Eltern-Kind-Beziehungen, und das war ein Teil der Lösung.

    
Elie 28.09.2008, 20:20
quelle
0

Ich hatte dieses Problem und es dauerte ewig, um es herauszufinden. Die Child-Tabelle muss Nullen für den übergeordneten Fremdschlüssel zulassen. NHibernate speichert die untergeordneten Elemente in der Fremdschlüsselspalte gerne mit NULL und kehrt dann zurück und aktualisiert sie mit der richtigen ParentId.

    
RyanL 17.11.2010 14:25
quelle