NHibernate에 초보자이고 NHibernate 2.1.2.4000 FluentNHibernate 버전 1.1.0.685를 사용하여 이상한 동작이 발생했습니다. 어떻게 든 GUID 인 ID는 Item 객체에 처음 액세스 한 후 빈 상태로 재설정됩니다. 2 행에서와 같이 관련 객체에 액세스 할 때 발생하는 부작용이 있습니까?NHibernate, 관련 객체에 접근 한 후 속성을 재설정 함
1. System.Diagnostics.Debug.WriteLine(widgetQueue.Item.Id);
2. var ItemStageId = widgetQueue.Item.CurrentStage.Id.ToString();
3. System.Diagnostics.Debug.WriteLine(widgetQueue.Item.Id);
Output Window:
113a6af2-3fe2-49c2-9276-9ec30081a811
00000000-0000-0000-0000-000000000000
업데이트 : 새로운 가상에서 ID 필드를 변경
:
public class Item : EntityWithTypedId<Guid>
{
private Guid id;
[DomainSignature]
public new virtual Guid Id
{
get { return id; }
protected set { id = value; }
}
....
public Item() {
Id = Guid.Empty;
....
}
public Item(Guid id)
: base()
{
Id = id;
}
}
재정 에 :
public class Item : EntityWithTypedId<Guid>
{
private Guid id;
[DomainSignature]
public override Guid Id
{
get { return id; }
protected set { id = value; }
}
....
}
나는 런타임 오류 이후를 기다리고 있었다 나는 읽었다. 게으른로드가 작동하려면 속성이 가상이어야합니다. 무슨 일이 일어나는가?
업데이트 2 : Id 속성을 지원하기 위해 인스턴스 변수를 선언 한 것으로 나타났습니다. 그래서 그것을 제거하고 기본 클래스 'ID를 액세스했습니다. 이것은 효과적이고 더 이해가되지만 이전 시도가 실패한 이유를 아직 발견하지 못했습니다.
공개 클래스 항목 : EntityWithTypedId { // 개인 Guid ID;
[DomainSignature]
public new virtual Guid Id
{
get { return base.Id; }
protected set { base.Id = value; }
}
당신이 당신의 위젯 큐 및 항목 클래스에 대한 코드를 게시 할 수 있습니까? 모든 관련 매핑이 도움이 될 것입니다. – AlexCuse
나는 조금 더 주위에 땜질했고, 내가 약간의 진보를 만들었다라고 생각한다. 내가 어떻게 당신에게 매핑을 보여줄지 모르겠다. Sharp Architecure 프레임 워크를 사용하고 있으며 모델 생성 방법을 배웠습니다. –
Sharp Arch.의 최신 버전에 익숙하지 않지만 ID 속성을 재정의 (또는 * new * 사용)하고 생성자를 사용하여 ID를 수락하는 등 코드에 이상한 점이 두 가지 있습니다. 이것은 문제를 일으킬 수있는 것처럼 보입니다. – cbp