2
我已經在會話工廠配置了二級高速緩存。但是對於POCO實體,我沒有啓用緩存。NHibernate第二級高速緩存實體沒有緩存配置
我使用功能NHibernate用於配置的SessionFactory和POCO實體。
這裏是會話工廠的配置:
var cfg = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(connectionString)
.Provider("NHibernate.Connection.DriverConnectionProvider, NHibernate")
.Dialect<CustomMsSql2008Dialect>()
.Driver<SqlAzureClientDriver>()
.ShowSql())
.Cache(x =>
{
x.UseQueryCache();
x.UseSecondLevelCache().ProviderClass<HashtableCacheProvider>().UseMinimalPuts();
})
的POCO實體配置如下:
public CustomerConfiguration()
{
Table("Sys_Customer");
DynamicUpdate();
Id(x => x.Id).GeneratedBy.GuidComb().UnsavedValue(Guid.Empty);
Map(x => x.Code);
Map(x => x.Name);
Map(x => x.IsActive);
Component(x => x.Contact).ColumnPrefix("Contact_");
Component(x => x.Address).ColumnPrefix("Address_");
Map(x => x.IsDeleted);
Map(x => x.CreatedOn).Column("CreatedOn");
Map(x => x.CreatedBy).Column("CreatedBy").Length(100);
Map(x => x.LastModifiedOn).Column("LastModifiedOn");
Map(x => x.LastModifiedBy).Column("LastModifiedBy").Length(100);
Version(x => x.RowVersion).UnsavedValue("0");
}
所以很明顯的Sys_Customer實體我還沒有配置任何緩存,但是當我運行下面的代碼:數據庫被擊中一次:
using (ISession s = RepositorySession)
{
var f = s.Get<Customer>(new Guid("75EDC0C2-4E58-43FF-B0D8-8C52FBB2D502"));
var d = f.Code;
}
using (ISession s = RepositorySession)
{
var f = s.Get<Customer>(new Guid("75EDC0C2-4E58-43FF-B0D8-8C52FBB2D502"));
var d = f.Code;
}
當我從SessionFactory中刪除緩存配置時,數據庫被擊中兩次。所以顯然這個實體被緩存在二級緩存中。
誰能告訴我如何避免緩存實體到的NHibernate的二級緩存????
配置緩存,而且只命中分貝一次,然後打兩次刪除緩存配置的時候,我希望是正常的行爲。 – mxmissile
但我沒有爲實體啓用緩存,但實體正在緩存。我沒有要求NHibernate緩存Sys_Customer實體,但它獲得緩存。 –
我的意思是刪除緩存配置是從NHibernate會話工廠本身刪除緩存配置。即從這裏開始:.Cache(x => x.UseQueryCache(); x.UseSecondLevelCache()。ProviderClass()。UseMinimalPuts(); }) –