C#怎么阻止一个对象自动销毁

esechi 2010-07-15 02:03:15
有用过codesmith Nhibernate模版生成的吗?
生成的session管理模块中

public NHibernateSession(ISession session)
{
this.iSession = session;
}
~NHibernateSession()
{
Dispose(true);
}
private bool _isDisposed = false;
public void Dispose()
{
Dispose(false);
}
private void Dispose(bool finalizing)
{
if (!_isDisposed)
{
// Close Session
Close();
// Flag as disposed.
_isDisposed = true;
if (!finalizing)
GC.SuppressFinalize(this);
}
}
public void Close()
{
if (iSession.IsOpen)
{
iSession.Flush();
iSession.Close();
}
}

最后面的 iSession.Flush(); 经常报异常提示iSession已关闭。我跟踪了一下,到这里iSession.IsOpen确实是true的

我怀疑是垃圾回收器,在析构NHibernateSession类实例的时候,iSession可能已经销毁了,不知道有什么办法阻止垃圾回收器销毁iSession,iSession类是Nhibernate框架的了,不能改
...全文
405 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
esechi 2010-07-19
  • 打赏
  • 举报
回复
就没有用codesmith Nhibernate模版生成的吗?你们可以试一下codesmith 5.0破解版默认模版
esechi 2010-07-19
  • 打赏
  • 举报
回复
怎么会和模版没有关系,全是模版生成的代码,我就在页面上,简单的一个查询显示,不停的刷新就会出现这个错误
风平心境 2010-07-16
  • 打赏
  • 举报
回复
试试:
建立一个全局的静态类别创建它,并引用你要阻止销毁的类别. 如:定义一个集合.并把他加到集合里面
陈言蹊 2010-07-16
  • 打赏
  • 举报
回复
帮你顶~~
有话好好说 2010-07-16
  • 打赏
  • 举报
回复
如果你对象的宿主都已经释放了,那么这个对象你不可能保存得下来,你只能说是将对象包含的内容复制到一个外部的对象中去。
criedshy 2010-07-16
  • 打赏
  • 举报
回复
这个和模板没关系的,你是不是哪里调用了GC.Collect();
wantalcs 2010-07-16
  • 打赏
  • 举报
回复
用GC.KeepAlive方法。这个方法有负面作用,请谨慎使用。
马老虎 2010-07-16
  • 打赏
  • 举报
回复
Nhibernate 了解一点。。。。。
Valefish 2010-07-16
  • 打赏
  • 举报
回复
Mark
铛铛 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 esechi 的回复:]
没人用过codesmith的Nhibernate模版吗?csdn真是垃圾,什么问题还是要自己解决
[/Quote]
CSDN的本意被扭曲了?
esechi 2010-07-16
  • 打赏
  • 举报
回复
没人用过codesmith的Nhibernate模版吗?csdn真是垃圾,什么问题还是要自己解决
老Key 2010-07-15
  • 打赏
  • 举报
回复
没想过这个问题。。帮忙顶了。。。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧