Tôi có một đối tượng mới với một tập hợp các đối tượng mới bên trong nó trên một số tài sản như là một IList. Tôi thấy thông qua sql profiler hai truy vấn chèn đang được thực hiện .. một cho cha mẹ, trong đó có id guid mới, và một cho trẻ em, tuy nhiên, các khóa nước ngoài trên con tham chiếu đến phụ huynh, là một guid trống. Dưới đây là bản đồ của tôi trên phụ huynh:Tại sao bộ sưu tập túi NHibernate của tôi không đặt 'id cha' của trẻ em một cách linh hoạt?
<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>
Trên lớp Backer.cs, tôi đã xác định tài sản BackerEntries như
IList<BackerEntry>
Khi tôi cố gắng SaveOrUpdate thông qua tại đơn vị tôi nhận được kết quả như sau trong sql profiler:
exec sp_executesql N'INSERT INTO Backer (Tên, PostCardSizeId, ItemNumber, BackerId) GIÁ TRỊ (@ 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'
exec sp_executesql N'INSERT VÀO BackerEntry (BackerId, BackerEntryTypeId, Tên, Mô tả, maxlength, isRequired, ưu tiên , BackerEntryId) GIÁ TRỊ (@ p0, @ p1, @ p2, @ p3, @ p4, @ p5, @ p6, @ p7) ', N' @ p0 uniqueidentifier, @ p1 uniqueidentifier, @ p2 nvarchar (5), @ p3 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 '
Như bạn thấy, nó không đặt lại các guid trống cho BackerId trên đứa trẻ để các hướng dẫn thực sự mới của phụ huynh.
Cuối cùng, ném ngoại lệ là:
"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: SOLVED! Câu trả lời đầu tiên bên dưới chỉ tôi vào đúng hướng. Tôi cần phải thêm tham chiếu ngược đó vào ánh xạ và lớp con. Điều này cho phép nó làm việc một cách thuần túy .net - tuy nhiên, khi chấp nhận json, đã có một ngắt kết nối vì vậy tôi đã phải đưa ra một số mã kỳ quặc để 'đính kèm lại' các em.
Cảm ơn bạn .. Bạn đã chỉ cho tôi đúng hướng ... Tôi không có tham chiếu ngược trong bản đồ con của tôi. – EvilSyn