gpt4 book ai didi

NHibernate 序列化问题 - 类型 'NHibernate.Cfg.Configuration' 未标记为可序列化

转载 作者:行者123 更新时间:2023-12-04 06:41:16 30 4
gpt4 key购买 nike

我正在尝试通过 改善使用 NHibernate 的 C# Winforms 应用程序的启动时间序列化 NHibernate.Cfg.configuration 对象(如 http://msdn.microsoft.com/en-us/magazine/ee819139.aspx 所述)但是当我尝试序列化时出现以下错误:

System.Runtime.Serialization.SerializationException : Type 'NHibernate.Cfg.Configuration' in Assembly 'NHibernate, Version=1.2.1.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4' is not marked as serializable.



另一个提到这一点的 stackoverflow 帖子是 duplicate object graph and persist back as new in nhibernate但不幸的是,考虑到那里发布的评论,我仍然遇到同样的错误。

中不包含任何实体类映射 的收藏属性NHibernate.Cfg.Configuration 对象有任何对 的引用NHibernate.Cfg.Configuration 专场 session 工厂 .事实上,包含这些实体的项目与我的 所在的项目没有任何关系。 NHibernateHelper 类被发现。

只是为了确保,我还标记了 全部 类与 [可序列化] 属性,但这也没有帮助。

下面是我的 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>

任何想法可能是什么问题?

谢谢

最佳答案

真正的问题是您使用的是 NHibernate 1.2。它真的很旧(现在 3 岁了),它没有可序列化的配置( code here )。

升级到 NHibernate 2.1.2 或更好的 3.0。

关于NHibernate 序列化问题 - 类型 'NHibernate.Cfg.Configuration' 未标记为可序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4203504/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com