nHibernatesession和多线程我有一个方法,使用nHibernatesession有很多持久调用,而且有效,没问题。但是由于多线程的原因,我需要重构这个方法来从循环内部的内容中提取方法。然后我用这个方法创建了一个类。就像正常的重构一样,但是这个方法调用中的nHibernatesession被破坏了,没有上下文,我也没有很快完成。多线程是否存在nHibernate问题?我有同样的问题,即使我只有一个线程在执行。我通过SessionFactory和Fa?ade模式使用nHibernateSession,这意味着,会话不是这些对象的字段,它在SessionFactory中是全局的。为了更清楚一点:之前:Method(){...持久化调用foreach(Thing..){...持久化调用每个事物(1)}...}之后:Method(){...持久性调用foreach(Thing..){创建一个带有一些数据的thingResolver对象使用thingResolver.Method(1)启动一个新线程}..等待完成线程并继续}我们的nHibernate会话工厂是线程感知和存储/检索每个线程的nHibernate会话。它现在工作得很好;)按照设计,会话在NHibernate中不是线程安全的。因此,只要您只有一个线程使用会话,就应该没问题。我不确定你在做什么,但如果你在原始线程中创建的同一会话中有一些持久调用-这可能是你问题的原因,如果我是真的,你可以在你的新会话中创建一个单独的会话,那么它将是每个线程一个会话。NHibernate参考资料在第10.2节http://nhibernate.info/doc/nh/en/index.html#transactions可以为多个线程提供单个NHibernateSessionFactory,只要每个线程都有一个单独的NHibernate会话。这是一个会给出异常的示例,因为它为每个线程使用相同的会话:https://forum.hibernate.org/viewtopic.php?p=2373236&sid=db537baa5a57e3968abdda5cceec2a24解决方案是将会话存储在LocaldataStoreSlot上,如下所示然后,您可以为每个请求创建一个会话模型。以上就是C#学习教程:nHibernate会话与多线程分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
