2017-08-29 60 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