2010-07-24 56 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包含在项目中,出于某种未知的原因......但又包括它们,它都很好!

奇怪它是如何没有抛出一个错误。