2012-09-21 88 views
0

我正在寫一個Windows窗體應用程序需要存儲一些持久的第二層緩存NHibernate的實體數據。據我所知,滿足我的應用程序的要求,唯一的2級緩存提供者是流行,但我發現了一個尷尬異常,當我將其配置:NHibernate第二級緩存與流行

System.ArgumentNullException was unhandled 
    Message=Value cannot be null. 
Parameter name: key 
    Source=mscorlib 
    ParamName=key 
    StackTrace: 
    at System.Collections.Generic.Dictionary`2.FindEntry(TKey key) 
    at System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value) 
    at NHibernate.Impl.SessionFactoryObjectFactory.GetNamedInstance(String name) 
    at NHibernate.Impl.SessionFactoryImpl.GetRealObject(StreamingContext context) 
    at System.Runtime.Serialization.ObjectManager.ResolveObjectReference(ObjectHolder holder) 
    at System.Runtime.Serialization.ObjectManager.DoFixups() 
    at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 
    at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) 
    at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream) 
    at Bamboo.Prevalence.Implementation.PendingCommandsEnumerator.NextCommand() 
    at Bamboo.Prevalence.Implementation.PendingCommandsEnumerator.MoveNext() 
    at Bamboo.Prevalence.PrevalenceEngine.RecoverCommands(CommandLogReader reader, ExceptionDuringRecoveryHandler handler) 
    at Bamboo.Prevalence.PrevalenceEngine.RecoverSystem(Type systemType, CommandLogReader reader, ExceptionDuringRecoveryHandler handler) 
    at Bamboo.Prevalence.PrevalenceEngine..ctor(Type systemType, String prevalenceBase, BinaryFormatter formatter, ExceptionDuringRecoveryHandler handler) 
    at Bamboo.Prevalence.TransparentPrevalenceEngine..ctor(Type systemType, String prevalenceBase, BinaryFormatter formatter, ExceptionDuringRecoveryHandler handler) 
    at Bamboo.Prevalence.TransparentPrevalenceEngine..ctor(Type systemType, String prevalenceBase, BinaryFormatter formatter) 
    at Bamboo.Prevalence.PrevalenceActivator.CreateTransparentEngine(Type systemType, String prevalenceBase, BinaryFormatter formatter) 
    at Bamboo.Prevalence.PrevalenceActivator.CreateTransparentEngine(Type systemType, String prevalenceBase) 
    at NHibernate.Caches.Prevalence.PrevalenceCacheProvider.SetupEngine() 
    at NHibernate.Caches.Prevalence.PrevalenceCacheProvider.Start(IDictionary`2 properties) 
    at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners) 
    at NHibernate.Cfg.Configuration.BuildSessionFactory() 
    at AcessoDados.DB.Configure() in C:\Users\Herberth\MyProject\DataAccess\DB.cs:line 78 

這是額外的代碼我使用:

configuration.SessionFactory().Caching.Through<NHibernate.Caches.Prevalence.PrevalenceCacheProvider>().PrefixingRegionsWith("MyRegion").WithDefaultExpiration(60); 

當我註釋掉這一行,它工作正常(無緩存,當然);

下面是我使用的完整代碼:

configuration = new Configuration(); 
var mapper = new ModelMapper(); 
mapper.AddMappings(Assembly.GetExecutingAssembly().GetExportedTypes()); 
HbmMapping domainMapping = mapper.CompileMappingForAllExplicitlyAddedEntities(); 
configuration.DataBaseIntegration(c => 
{ 
    c.Dialect<MySQLDialect>(); 
    c.ConnectionString = @"Server=localhost;Database=mydb;Uid=root;Pwd=mypwd"; 
    c.ConnectionString = DBConnectionStrings.Principal; 
    c.LogFormattedSql = true; 
    c.LogSqlInConsole = true; 
    c.IsolationLevel = System.Data.IsolationLevel.ReadCommitted; 
}); 
configuration.AddMapping(domainMapping); 
configuration.Cache(c => { c.UseQueryCache = true; }); 
configuration.SessionFactory().Caching.Through<NHibernate.Caches.Prevalence.PrevalenceCacheProvider>().PrefixingRegionsWith("MyRegion").WithDefaultExpiration(60); 
SessionFactory = configuration.BuildSessionFactory(); 

所有相關性在其最新版本。

在此先感謝!

+0

其餘的例外情況如何? –

+0

對不起,我編輯了這個問題。 –

回答

0

我有這個問題,因爲可執行目錄中的目錄NHibernate.Cache.StandardQueryCacheUpdateTimestampsCache已過期。

但是,這導致下一個問題 - 我無法安裝在Program Files下,因爲NHibernate試圖在第一次運行時創建這些目錄。

相關問題