NHとFNHのトランクバージョンを入手しました。2次キャッシュを追加しようとすると、NHibernateの一部が選択された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
mssql2008で句が追加されました):
クエリは「SELECT」または「SELECTDISTINCT」で始まる必要があります
[NotSupportedException:クエリは「SELECT」または「SELECTDISTINCT」で開始する必要があります] NHibernate.Dialect.MsSql2000Dialect.GetAfterSelectInsertPoint(SqlString sql)+179 NHibernate.Dialect.MsSql2000Dialect.GetLimitString(SqlString querySqlString、Int32 offset、Int32 limit)+119 NHibernate .Dialect.MsSql2005Dialect.GetLimitString(SqlString querySqlString、Int32 offset、Int32 last)+127 NHibernate.Loader.Loader.PrepareQueryCommand(QueryParameters queryParameters、Boolean scroll、ISessionImplementor session)+725 NHibernate.Loader.Loader.DoQuery(ISessionImplementor session、QueryParameters queryParameters 、ブールreturnProxies)+352 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementorセッション、QueryParameters queryParameters、ブールreturnProxies)+114NHibernate.Loader。Loader.DoList(ISessionImplementorセッション、QueryParameters queryParameters)+205
nhibernateを正確に混乱させるアイデアとそれを修正する方法はありますか?
有罪のNHibernateコード(NHibernate / Dialect / 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)
これを引き起こすように見えます。幸いなことに、私はそのクエリのバインドを解除できます。
うまくいけば、それはこれを修正するでしょう。