我得到了NH和FNH的主幹版本。當我嘗試添加二級緩存時,NHibernate的某些部分會忘記所選的sqldialect。NHibernate 2nd lvl緩存,自定義查詢,sqldialect
初始配置:
var cfg = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(connectionString)
.DefaultSchema("dbo")
.UseReflectionOptimizer()
.Mappings(m => ................);
有罪自定義查詢:
var sql = @"with Foo(col1,col2,col3)
as (select bla bla bla...)
Select bla bla bla from Foo";
list = Session.CreateSQLQuery(sql)
.AddEntity("fizz", typeof(Fizz))
.SomethingUnimportant();
當我改變配置,以:
var cfg = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(connectionString)
.DefaultSchema("dbo")
.UseReflectionOptimizer()
.Cache(c=>c
.UseQueryCache()
.ProviderClass<HashtableCacheProvider>())
.ShowSql())
.Mappings(m => ................);
查詢拋出錯誤(WITH
條款是ADDE在mssql2008 d):
查詢應用啓動 'SELECT' 或 'SELECT DISTINCT'
[NotSupportedException異常:查詢應與 'SELECT' 或 'SELECT DISTINCT' 開始] NHibernate.Dialect。 MsSql2000Dialect.GetAfterSelectInsertPoint(SQL的SqlString)+179 NHibernate.Dialect.MsSql2000Dialect.GetLimitString(的SqlString querySqlString,偏移的Int32,的Int32限制)+119 NHibernate.Dialect.MsSql2005Dialect.GetLimitString(的SqlString querySqlString,偏移的Int32,最後的Int32)+127 NHibernate.Loader.Loader.PrepareQueryCommand(QueryParameters queryParameters,Boolean scroll,ISessionImplemen TOR會話)725 NHibernate.Loader.Loader.DoQuery(ISessionImplementor會話,QueryParameters queryParameters,布爾returnProxies)352個 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor會話,QueryParameters queryParameters,布爾returnProxies)114 NHibernate.Loader。 Loader.DoList(ISessionImplementor會議,QueryParameters queryParameters)+205
任何想法究竟混淆NHibernate和如何解決它?
有罪NHibernate的代碼(在NHibernate的/方言/ MsSql200Dialect.cs):
private static int GetAfterSelectInsertPoint(SqlString sql)
{
if (sql.StartsWithCaseInsensitive("select distinct"))
{
return 15;
}
else if (sql.StartsWithCaseInsensitive("select"))
{
return 6;
}
throw new NotSupportedException
("The query should start with 'SELECT' or 'SELECT DISTINCT'");
}
}
看起來其原因.SetMaxResults(123)
此。幸運的是,我可以解除該查詢。
希望能解決這個問題。
呸!被這個也抓住了。 – TWith2Sugars 2012-01-13 15:36:58
不能相信它發生了! – TWith2Sugars 2012-02-16 11:18:04