IList로 일부 속성에서 새 개체 컬렉션이 포함 된 새 개체가 있습니다. 나는 SQL 프로파일 러를 실행하는 두 개의 삽입 쿼리를 통해 볼 수 있습니다 .. 하나는 부모를 참조하는 자식에 대한 foreign-key는 빈 GUID입니다. 여기에 부모 내 매핑 :왜 내 NHibernate 가방 콜렉션이 아이들의 '부모 ID'를 동적으로 설정하지 않습니까?
<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>
Backer.cs 클래스에, 나는이
IList<BackerEntry>
나는 엔티티로 전달 될 saveOrUpdate하려고으로 BackerEntries 속성을 정의 나는 SQL에서 다음과 같은 결과를 얻을 수 프로파일 러 :
exec sp_executesql N'INSERT INTO 백커 (이름, 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-82FF3 0F5176684D '@ P2 = N'qaa', @ P3 = '18FBF8CE-FD22-4D08-A3B1-63D6DFF426E5'
간부 sp_executesql을 N'INSERT INTO BackerEntry (BackerId, BackerEntryTypeId, 이름, 설명, 최대 길이, 애드 팍, 우선 순위 , BackerEntryId) N '@ p0 uniqueidentifier, @ p1 uniqueidentifier, @ p2 nvarchar (5), @ p3', P3, P4, P5, P6) nvarchar (5), @ p4 int, @ p5 비트, @ 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 '
보시다시피, 자식의 BackerId에 대한 빈 guid가 부모의 새 실제 가이드로 재설정되지 않습니다.
마지막으로, 예외 던지기는 다음과 같습니다
"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
편집 :이 해결! 아래의 첫 번째 대답은 나를 올바른 방향으로 가리켰다. 나는 자식 매핑과 클래스에 그 역 참조를 추가해야했습니다. 이것으로 순전히 .net 방식으로 작동 할 수있었습니다. 그러나 json을 수락 할 때 연결이 끊어 지므로 아이들을 '다시 부착'하기 위해 기발한 코드를 만들어야했습니다.
고맙습니다. 올바른 방향으로 나를 가리켰습니다 ... 제 자식 매핑에 백 레퍼런스가 없었습니다. – EvilSyn