使用返回始终为空的NHibernate从表中获取数据

时间:2017-08-29 13:42:00

标签: c# nhibernate

我正在尝试使用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();
    }
}

可能是什么问题或我如何找到问题?

2 个答案:

答案 0 :(得分:1)

到目前为止,解决几乎任何NHibernate问题的最便捷工具是NHibernate Profiler,由一家由NH最大的NH贡献者Ayende运营的公司维护。

您可以在此处找到更多信息:https://www.hibernatingrhinos.com/products/nhprof

答案 1 :(得分:0)

我认为EngineEvaluationMap必须是公开的,因此可能没有被加载。 NHibernate默默地忽略了QueryOver的未映射类,这是一个已知问题。您还可以执行的是启用日志记录,以确保您发出SQL查询。