2017-08-29 218 views
0

我试图用线与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

连接字符串指向正确的数据库? – mjwills

+0

输出生成的sql – Fran

+0

连接没问题,因为其他表格工作正常。 –

回答

0

我认为EngineEvaluationMap必须是公开的,所以它可能是没有被加载。有一个已知的问题,NHibernate默默地忽略QueryOver的未映射类。你也可以做的是启用日志记录,以确保你正在发出一个SQL查询。

+0

你能链接到问题“已知”的位置吗? AFAIK它抛出异常... – MarioDS

+0

当然:https://weblogs.asp.net/ricardoperes/nhibernate-pitfalls-querying-unmapped-classes。 –

+0

好吧,没有违法,但你只是链接到你自己的博客。我的意思是,你能否链接到备份此类声明的其他资源。如果没有,你能否至少指定哪些版本的NHibernate会暴露这种行为。我知道我们广泛使用LINQ api,我赞成它用于新的开发,并且我非常确定,我清楚地记得在查询和出错时收到“MappingException”。 – MarioDS