我有一个由代码映射的按层次结构的表结构,以及一个包含数据的表 - 116 行。最初,该表(和整个数据库)是使用 Entity Framework Code First 方法创建的。由于某些原因,我从 EF 切换到 NH,并尝试从提到的表中获取数据导致 115 个正确创建的对象,并且只有一行导致代理对象的基类型错误。我试图找出其他相似行和错误行之间的差异(有 30 行具有相同的鉴别器值),但我失败了。因此,问题是 - 我可以使用什么调试技术来解决我的问题?
下面是我如何从表中加载数据的小片段:
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);
}
}