내 nhibernate bag 컬렉션이 어린이의 '부모 ID'를 동적으로 설정하지 않는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/146604

문제

나는 일부 속성에 ILIST로 새로운 개체가있는 새로운 객체를 가지고 있습니다. SQL Profiler Two Insert Queries가 실행되는 것을 보았습니다. 새로운 Guid 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 클래스에서 Backerentries 속성을 다음과 같이 정의했습니다.

IList<BackerEntry>

전달 된 엔티티에서 저장하려고 할 때 SQL 프로파일 러에서 다음과 같은 결과를 얻습니다.

exec sp_executesql n'Insert into Backer (이름, 엽서, 항목, 뒷이야기) 값 (@p0,@p1,@p2) ', n'@p0 nvarchar (3),@p1 고유 한 식별기,@p2 nvarchar (3) ),@p3 고유 한 핵심기 ',@p0 = n'qaa',@p1 = 'bc95e7eb-5ee8-44b2-82ff30f5176684d',@p2 = n'qaa ',@p3 ='18fbf8ce-fd22-4d08-a3b1-63d6dff426e5 '5 '

exec sp_executesql n'Insert recconerentry (뒷이야기, 뒷이야기, 뒷이야기, 이름, 설명, maxlength, isrequired, 우선 순위, backerentryid) 값 ( @p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7) ', n'@p0 고유 한 식별기,@p1 고유 한 식별기,@p2 nvarchar (5),@p3 nvarchar (5),@p4 int,@p5 bit,@p6 int,@p7 고유 한 식별기 ',@p0 ='000000-0000 -0000-0000-0000000000 ',@P1 ='2C5BDD33-5DD3-42EC-AA0E-F1E548A5F6E4 ',@P2 = N'QAADF',@P3 = N'WASDF ',@P4 = 0,@P5 = 1,@ p6 = 0,@p7 = 'Fe9c4a35-6211-4E17-A75A-60CCB526F1CA'

보시다시피, 아이에 대한 뒷면에 대한 빈 안내서를 부모의 새로운 진정한 안내에 재설정하지 않습니다.

마지막으로 예외 던지기는 다음과 같습니다.

"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을 수락 할 때 연결이 끊어져 어린이들을 '다시 해치기 위해'기발한 코드를 만들어야했습니다.

도움이 되었습니까?

해결책

매핑 클래스에 null = "true"를 추가해야 할 수도 있습니다.

<bag name="BackerEntries" table="BackerEntry" cascade="all" lazy="false" order-by="Priority">
  <key column="BackerId" not-null="true"/>
  <one-to-many class="BackerEntry" />
</bag>

아동 클래스에 정의 된 매핑의 반대가 있는지 확인할뿐만 아니라 다음과 같습니다.

<many-to-one name="parent" column="PARENT_ID" not-null="true"/>

현재 프로젝트에서 부모-자식 관계를 가진 현재 프로젝트에서 동면과 비슷한 문제가 있었으며 이는 해결책의 일부였습니다.

다른 팁

나는이 문제가 있었고 알아내는 데 영원히 걸렸다. 어린이 테이블은 부모의 외국 키에 널을 허용해야합니다. nhibernate는 외국 키 열에 null이있는 어린이들을 구한 다음 돌아가서 올바른 부모로 업데이트하는 것을 좋아합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top