我試圖提高使用NHibernate的一個C#WinForms應用程序的啓動時間(截至http://msdn.microsoft.com/en-us/magazine/ee819139.aspx描述的),但我得到以下錯誤,當我嘗試和連載:NHibernate的序列化問題 - 類型「NHibernate.Cfg.Configuration」不被<strong>序列化</strong>的<strong>NHibernate.Cfg.configuration</strong>對象標記爲可序列
System.Runtime.Serialization.SerializationException :鍵入「NHibernate.Cfg.Configuration」在大會「NHibernate的 , 版本= 1.2.1.4000,文化=中性, PublicKeyToken = aa95f207798dfdb4'是 未標記爲可序列化。
提到這個的另一個stackoverflow帖子是duplicate object graph and persist back as new in nhibernate,但不幸的是,考慮到張貼在那裏的意見,我仍然得到相同的錯誤。
被包括在ClassMappings集合屬性NHibernate.Cfg.Configuration對象的實體的任何一個都沒有到NHibernate.Cfg.Configuration任何參考或會話或的SessionFactory。實際上,包含這些實體的項目對於找到我的類的項目沒有任何參考。
只是爲了確保,我也標誌着所有類與[Serializable接口]屬性,但也毫無幫助。
下面是我NHibernateHelper類和NHibernate的XML配置:
NHibernateHelper:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Context;
namespace PurchaseOrder.Data
{
/// <summary>
/// A helper class which provides NHibernate session objects on demand.
/// The class creates a session factory only the first time a client needs a new session.
/// </summary>
public class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
private const string SerializedConfiguration = "configurtion.serialized";
public static ISessionFactory SessionFactory{
get{
if (_sessionFactory == null){
var configuration = LoadConfigurationFromFile();
if (configuration == null){
configuration = new Configuration();
configuration.Configure();
SaveConfigurationToFile(configuration);
}
_sessionFactory = configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}
private static Configuration LoadConfigurationFromFile(){
try{
using (var file = File.Open(SerializedConfiguration, FileMode.Open)){
var bf = new BinaryFormatter();
return bf.Deserialize(file) as Configuration;
}
}
catch (Exception ex){
return null;
}
}
private static void SaveConfigurationToFile(Configuration configuration){
using (var file = File.Open(SerializedConfiguration, FileMode.Create)){
var bf = new BinaryFormatter();
bf.Serialize(file, configuration);
}
}
public static ISession OpenSession(){
return SessionFactory.OpenSession();
}
public static ISession GetCurrentSession(){
return SessionFactory.GetCurrentSession();
}
}
}
NHibernate的XML配置:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Server=<ServerName>;initial catalog=<DBName>;Integrated Security=SSPI</property>
<property name="show_sql">true</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="current_session_context_class">thread_static</property>
<mapping assembly="<AssemblyName>" />
</session-factory>
</hibernate-configuration>
任何想法可能是什麼伊斯蘭教UE?
謝謝
感謝Mauricio,這很好地糾正了這個問題! – Matthew 2010-11-17 14:44:36