2010-07-24 74 views
0

我剛纔看着鉤住我的申請,NHibernate的(功能NHibernate),但我有幾個問題...功能NHibernate沒有查詢數據庫正確

我試圖遵循以人做了什麼,發現了這個:

public class NHibernateSessionPerRequest : IHttpModule 
{ 
    private static readonly ISessionFactory _sessionFactory; 

    static NHibernateSessionPerRequest() 
    { 
     _sessionFactory = CreateSessionFactory(); 
    } 

    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += BeginRequest; 
     context.EndRequest += EndRequest; 
    } 

    public static ISession GetCurrentSession() 
    { 
     return _sessionFactory.GetCurrentSession(); 
    } 

    public void Dispose() { } 

    private static void BeginRequest(object sender, EventArgs e) 
    { 
     ISession session = _sessionFactory.OpenSession(); 
     session.BeginTransaction(); 
     CurrentSessionContext.Bind(session); 
    } 

    private static void EndRequest(object sender, EventArgs e) 
    { 
     ISession session = CurrentSessionContext.Unbind(_sessionFactory); 

     if (session == null) return; 

     try 
     { 
      session.Transaction.Commit(); 
     } 
     catch (Exception) 
     { 
      session.Transaction.Rollback(); 
     } 
     finally 
     { 
      session.Close(); 
      session.Dispose(); 
     } 
    } 

    private static ISessionFactory CreateSessionFactory() 
    { 
     string connString = "AV8MediaUser"; 

     FluentConfiguration configuration = Fluently.Configure() 
     .Database(MsSqlConfiguration.MsSql2008.ShowSql().ConnectionString(
      x => x.FromConnectionStringWithKey(connString))) 
     .ExposeConfiguration(
      c => c.SetProperty("current_session_context_class", "web")) 
     .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Category>()); 

     return configuration.BuildSessionFactory(); 
    } 
} 

但是,當我穿過它似乎正確地連接到數據庫,但它不運行查詢:

return Session.CreateCriteria<Category>() 
      .List<Category>(); 

我做得STUP天真的錯誤?

回答

0

CreateCriteria期望您指定您想要檢索實例的模型對象名稱。你好像缺少你的模型對象類型名稱。嘗試更多的東西是這樣的:

List<YourModelObject> results = session.CreateCriteria<YourModelObject>() 
     .List<YourModelObject>(); 

要看到什麼實際被髮送到數據庫考慮使用Ayende的NHProfiler - 它會派上用場,後來看到你的更復雜的條件查詢或HQL查詢實際上導致當...

+0

我試過了,沒有什麼改變: return Session.CreateCriteria ().List (); 我也嘗試NHProfiler ...但沒有會話似乎出現時,我運行我的程序...這讓我覺得NHibernateSessionPerRequest代碼包括在原始發佈是不正確的地方... 有一件事,雖然,什麼應該是.Mappings的值(m => m.FluentMappings.AddFromAssemblyOf () – Gary 2010-07-25 09:24:57

0

明白了......我沒有意識到,我的映射werent包含在項目中,出於某種未知的原因......但又包括它們,它都很好!

奇怪它是如何沒有拋出一個錯誤。