2011-07-05 32 views
16

tôi đã thiết lập nHibernate của tôi và làm việc một cách chính xác với QueryOver đối với hầu hết các truy vấn, tuy nhiên, bất cứ khi nào tôi cố gắng để làm một HQL CreateQuery tôi nhận được ngoại lệ mà đơn vị không được ánh xạ. Tôi có thể xác nhận rằng cùng một thực thể hoạt động tốt bằng QueryOver.nHibernate HQL - thực thể không được ánh xạ

Lưu ý: Tôi đang sử dụng thông thạo nHibernate

Bất kỳ ý tưởng nào sẽ gây ra điều này?

+9

Liệu nó có tác dụng nếu bạn sử dụng tên đầy đủ của thực thể bên trong HQL? –

+6

Bạn chỉ tìm thấy điều này. Tôi đang sử dụng tự động nhập sai trong conifg của tôi (vì có một số thực thể, trong các không gian tên khác nhau, với cùng tên lớp) và vì điều này trong HQL, tên đầy đủ của lớp phải được sử dụng. Hy vọng điều này sẽ giúp người khác quá :) – johnnyboy

+7

Bạn có thể muốn đăng bài này dưới dạng câu trả lời. –

Trả lời

8

Nếu bạn đã tắt tự động nhập trong ánh xạ (<hibernate-mapping auto-import="false">), thì bạn sẽ phải sử dụng tên lớp đủ điều kiện ở mọi nơi trong truy vấn của bạn, tên lớp không đủ tiêu chuẩn sẽ không hoạt động.

Nếu không, cho phép tự động nhập khẩu.

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

Như thế này:

/* 
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 
Các vấn đề liên quan