2011-07-05 152 views
16

我有我的nHibernate安裝程序,並正常使用QueryOver對於大多數查詢,但是,每當我嘗試執行HQL CreateQuery時,我得到的實例未映射的異常。我可以使用QueryOver確認相同的實體工作正常。nHibernate HQL-實體未映射

注:我使用功能NHibernate

任何想法會導致此?

+9

是否行得通? –

+6

是的,我自己發現了這一點。我在conifg中使用了auto-import false(因爲在不同的命名空間中有一些實體,具有相同的類名),因此在HQL中必須使用該類的完全限定名。 希望這可以幫助別人:) – johnnyboy

+7

你可能想發佈這個答案。 –

回答

8

如果您在映射中禁用了自動導入(<hibernate-mapping auto-import="false">),那麼您將不得不在查詢中的任何地方使用完全限定的類名,不合格的類名將不起作用。

否則,啓用自動導入。

Conventions.Setup(x => 
        { 
         x.Add(FluentNHibernate.Conventions.Helpers.AutoImport.Always()); // AutoImport.Never 
        }); // End FluentMappings.Conventions.Setup 

像這樣:

如果使用HQL內實體的完全限定名稱
/* 
var model = AutoMap.AssemblyOf<MyDb>() 
       .Where(t => t.Namespace.StartsWith("MyDb.Tables")) 
       .Conventions.AddFromAssemblyOf<MyDb>(); 
*/ 




     protected static AutoPersistenceModel CreateMappings() 
     { 
      //return new AutoPersistenceModel().AddMappingsFromAssemblyOf<MyDB.Tables.T_Admin>(); 

      return new AutoPersistenceModel().AddMappingsFromAssemblyOf<MyDb.Tables.T_Admin>() 
       .Where(t => t.Namespace == "MyDb.Tables"); 
     } 

    private static ISessionFactory CreateMsSqlSessionFactory() 
    { 
     //AutoPersistenceModel model = CreateAutoMappings(); 
     AutoPersistenceModel model = CreateMappings(); 

     return Fluently.Configure() 
      .Database(MsSqlConfiguration.MsSql2005 
      .ConnectionString(c => c 
       //.Server("MYCOMPUTER\\SQLEXPRESS") 
       .Server("localhost") 
       //.Database("testdb") 
       .Database("nhDMS") 
       .Username("TableCreatorWebServices") 
       .Password(DB.Tools.Cryptography.AES.DeCrypt("AES_ENCRYPTED_PW")))) 
      //.Mappings(m => m.FluentMappings.AddFromAssemblyOf<SsoToken>()) 
      .Mappings(m => 
       { 
        m.AutoMappings.Add(model); 
        m.FluentMappings.Conventions.Setup(x => 
        { 
         //x.AddFromAssemblyOf<MyDb.Tables.T_Admin>(); 
         x.Add(FluentNHibernate.Conventions.Helpers.AutoImport.Always()); // AutoImport.Never 
        }); // End FluentMappings.Conventions.Setup 
       } 

      ) // End Mappings 
      .ExposeConfiguration(BuildSchema) // BuildSchema function call... 
      .BuildSessionFactory(); 
    } // End Function CreateMsSqlSessionFactory