我正在尝试使用NHibernate从EngineEvaluation表中获取数据:
using (ISession session = OpenSession())
{
var c = session.QueryOver<EngineEvaluation>().List();
return c;
}
但是c虽然表不为空,但总是为空。
我像这样映射表:
internal class EngineEvaluationMap : ClassMap<EngineEvaluation>
{
public EngineEvaluationMap()
{
Table("EngineEvaluation");
Id(evaluation => evaluation.Id).GeneratedBy.Assigned();
Map(evaluation => evaluation.EngineSessionId).Nullable();
Map(evaluation => evaluation.Result).Nullable().Length(4001); // set length over 4000 to cause nvarchar (MAX)
Map(evaluation => evaluation.Parameters).Nullable();
Map(evaluation => evaluation.Score).Nullable();
Map(evaluation => evaluation.IgnoreScore).Nullable();
References(evaluation => evaluation.Engine).Not.Nullable();
References(evaluation => evaluation.EngineVersion).Not.Nullable();
HasMany(evaluation => evaluation.StatusChanges)
.Component(component =>
{
component.Map(change => change.ParentId).Formula("EngineEvaluationId");
component.Map(change => change.StatusChangeIndex).Formula("StatusChangeIndex");
component.Map(change => change.Timestamp).Not.Nullable();
component.Map(change => change.Status)
.CustomType<EnumStringType<EngineEvaluationStatus>>()
.Not.Nullable();
component.Map(change => change.Details).Length(4001); // set length over 4000 to cause nvarchar (MAX)
})
.KeyColumn("EngineEvaluationId")
.AsList(index => index.Column("StatusChangeIndex"))
.Table("EngineEvaluationStatusChanges")
.Cascade.AllDeleteOrphan();
HasMany(evaluation => evaluation.Errors)
.Component(component =>
{
component.Map(comment => comment.Timestamp).Not.Nullable();
component.Map(comment => comment.Message).Not.Nullable();
component.Map(comment => comment.ErrorLevel).CustomType(typeof(ErrorLevel)).Not.Nullable();
})
.AsList(index => index.Column("ErrorIndex"))
.Table("EngineEvaluationErrors")
.Cascade.AllDeleteOrphan();
}
}
可能是什么问题或我如何找到问题?
答案 0 :(得分:1)
到目前为止,解决几乎任何NHibernate问题的最便捷工具是NHibernate Profiler,由一家由NH最大的NH贡献者Ayende运营的公司维护。
您可以在此处找到更多信息:https://www.hibernatingrhinos.com/products/nhprof
答案 1 :(得分:0)
我认为EngineEvaluationMap
必须是公开的,因此可能没有被加载。 NHibernate默默地忽略了QueryOver的未映射类,这是一个已知问题。您还可以执行的是启用日志记录,以确保您发出SQL查询。