코드로 매핑 된 테이블 당 구조체 구조와 데이터가있는 테이블 - 116 행이 있습니다. 처음에이 테이블 (및 전체 데이터베이스)은 Entity Framework Code First 접근 방식을 사용하여 만들어졌습니다. 내가 EF에서 NH로 전환하는 몇 가지 이유로 인해 위에서 언급 한 테이블 결과에서 115 개의 올바르게 생성 된 객체에 데이터를 가져 오려고 시도하고 하나의 단일 행으로 인해 잘못된 기본 유형의 프록시 객체가 생성됩니다. 다른 유사한 행과 결함이있는 행 (동일한 Discriminator 값이있는 30 개의 행) 사이에 차이점을 찾으려고했지만 실패했습니다. 따라서 질문은 - 내 문제를 해결하기 위해 어떤 디버그 기술을 사용할 수 있습니까?nHibernate - TPH 객체 생성을 디버깅하는 방법이 있습니까?
나는 테이블에서 데이터를로드하는 방법을 작은 조각 아래:
var more = _dbSession.Query<BaseTreeNode>()
.Where(tn => !tn.IsTemplate)
.OrderBy(tn => tn.Id)
.ToList();
그리고 이것은 매핑 :
public class BaseTreeNodeMapping : ClassMapping<BaseTreeNode> {
public BaseTreeNodeMapping() {
Debug.WriteLine("{0}", GetType());
Table("BaseTreeNodes");
Id(x => x.Id);
Discriminator(x => {
x.Force(true);
x.Formula("arbitrary SQL expression");
x.Insert(true);
x.Length(128);
x.NotNullable(true);
x.Column("Discriminator");
});
Property(p => p.Name);
Property(x => x.SortOrder);
Property(x => x.IsTemplate);
Property(x => x.ArchiveUid);
Property(x => x.LastChangedAt, x => x.Lazy(false));
Property(x => x.LastChangedBy);
// Complex Properties
ManyToOne(x => x.Parent, p => {
p.Column("Parent_Id");
p.Class(typeof(BaseTreeNode));
p.NotNullable(false);
});
ManyToOne(x => x.ComplexNode, cn => {
cn.Column("ComplexNode_Id");
cn.NotNullable(true);
});
ManyToOne(x => x.ComplexStructure, cn => {
cn.Column("ComplexStructure_Id");
cn.NotNullable(true);
});
ManyToOne(x => x.ContentNode, cn => {
cn.Column("ContentNode_Id");
cn.NotNullable(true);
});
}
public class EntityMapping : SubclassMapping<Entity> {
public EntityMapping() {
DiscriminatorValue("Entity");
ManyToOne(p => p.TypeCode, t => {
t.Column("TypeCode_Id");
t.Class(typeof(TypeCode));
t.Fetch(FetchKind.Join);
t.NotNullable(true);
t.Lazy(LazyRelation.NoLazy);
});
Property(p => p.ArchivedFrom);
}
}