2011-07-05 7 views
16

Mam moją konfigurację nHibernate i działa poprawnie z QueryOver dla większości zapytań, jednak za każdym razem gdy próbuję zrobić HQ CreateQuery otrzymuję wyjątek, że encja nie jest mapowana. Mogę potwierdzić, że ten sam podmiot działa poprawnie przy użyciu QueryOver.nHibernate HQL - encja nie jest zmapowana

Uwaga: Używam Fluent NHibernate

pomysłów co spowodowałoby to?

+9

Czy to działa w przypadku korzystania z pełną nazwę podmiotu wewnątrz HQL? –

+6

Tak, właśnie to odkryłem. Używam false auto-import w moim conifg (ponieważ istnieją pewne encje, w różnych przestrzeniach nazw, o tej samej nazwie klasy) iz tego powodu w HQL musi być użyta w pełni kwalifikowana nazwa klasy. Mam nadzieję, że to pomoże komuś innemu :) – johnnyboy

+7

Możesz chcieć opublikować to jako odpowiedź. –

Odpowiedz

8

Jeśli wyłączyłeś automatyczne importowanie w swoich mapowaniach (<hibernate-mapping auto-import="false">), będziesz musiał użyć w pełni kwalifikowanych nazw klas wszędzie w swoich zapytaniach, niewykwalifikowane nazwy klas nie będą działać.

W przeciwnym razie włącz automatyczny import.

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

Jak to:

/* 
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