16
我有我的nHibernate安裝程序,並正常使用QueryOver對於大多數查詢,但是,每當我嘗試執行HQL CreateQuery時,我得到的實例未映射的異常。我可以使用QueryOver確認相同的實體工作正常。nHibernate HQL-實體未映射
注:我使用功能NHibernate
任何想法會導致此?
我有我的nHibernate安裝程序,並正常使用QueryOver對於大多數查詢,但是,每當我嘗試執行HQL CreateQuery時,我得到的實例未映射的異常。我可以使用QueryOver確認相同的實體工作正常。nHibernate HQL-實體未映射
注:我使用功能NHibernate
任何想法會導致此?
如果您在映射中禁用了自動導入(<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
是否行得通? –
是的,我自己發現了這一點。我在conifg中使用了auto-import false(因爲在不同的命名空間中有一些實體,具有相同的類名),因此在HQL中必須使用該類的完全限定名。 希望這可以幫助別人:) – johnnyboy
你可能想發佈這個答案。 –