새로운 기술을 배우기위한 간단한 응용 프로그램을 작성 중입니다. 나는 내 응용 프로그램을 작성하는 단위 테스트에 붙어있어 :NHibernate를 사용하여 엔티티를 삭제할 때 "not-null 속성이 null 값이나 일시적인 값을 참조합니다"
[Test]
public void LessonChangeSubjectShouldNotAffectFormerSubjectPersistence()
{
// given
Lesson ExampleLesson = TestDataFactory.CreateLesson();
Save(ExampleLesson);
Refresh(ref ExampleLesson);
Subject formerSubject = ExampleLesson.Subject;
// when
Subject subject = TestDataFactory.CreateSubject();
_subjectService.Save(subject);
ExampleLesson.ChangeSubject(subject);
Update(ExampleLesson);
_subjectService.Update(formerSubject);
Refresh(ref ExampleLesson);
formerSubject = _subjectService.Get(formerSubject.Id);
subject = _subjectService.Get(subject.Id);
// then
ExampleLesson.Subject.Should().Be(subject);
formerSubject.Should().NotBeNull();
formerSubject.Lessons.Should().NotContain(ExampleLesson);
Refresh(ref ExampleLesson);
_subjectService.Delete(formerSubject);
Refresh(ref ExampleLesson);
Delete(ExampleLesson);
}
이 시나리오는 다음과 같습니다 기본 임의의 주제와 교훈 저장 만들기
- 그것을
- 새로운 새로운 제목과 변화 수업 주제를 작성 하나
- 확인이
이 시나리오가 성공 된 피사체가 여전히 존재하는지 여부를하지만 어디 갔지 - null이 아닌 프로퍼티 참조 null 또는 과도 값 Register.Core.Model.Lesson.Subject
제목 : N은 테스트를 청소에 관해서는 오류
NHibernate.PropertyValueException와 마지막 줄에 실패 다음과 같이 레슨 클래스의 필드 매핑됩니다 :
References(x => x.Subject) .Cascade.SaveUpdate() .Column("SubjectId") .Fetch.Select() .ForeignKey("FK_Lessons_Subjects") .Index("IX_Subject") .LazyLoad() .Not.Nullable();
그리고 수업은 주제 클래스의 컬렉션으로 매핑됩니다 :
HasMany(x => x.Lessons) .Access.CamelCaseField(Prefix.Underscore) .Cascade.All() .Fetch.Select() .ForeignKeyConstraintName("FK_Lessons_Subjects") .Inverse() .KeyColumn("SubjectId") .Not.KeyNullable() .LazyLoad();
나는
Refresh(ref ExampleLesson); Delete(ExampleLesson);
가 NHibernate에 아무런 불만이 없습니다 및 테스트를 통과하여
_subjectService.Delete(formerSubject);
를 교환합니다. 나는 무슨 일이 일어나고 왜 주문이 중요한지 궁금하다. 누군가가 내 문제에 대한 해결책을 제시 할 수 있다면 또한 매우 감사 할 것입니다. 미리 감사드립니다.
@ RadimKöhler 지금 formerSubject'는 우리가 전에 새로운 부모를 얻을 수 RadimKöhler @ 다른 –
에 따라 변화하기 때문에 테스트에 수업 주제를 변경하기 때문에 잘못된 행동이, 인도 ExampleLesson 삭제 '삭제 새로운 것을 저장하고 저장합니다. 수업은 이전 부모가 삭제되기 전에 새로운 부모를 얻습니다. –