如何使这个线程安全

2023-12-19

我有以下用于 Fluent NHibernate 的 SessionFactory。

我收到一个错误

创建 SessionFactory 时使用了无效或不完整的配置。

带有 InnerException 的

已添加具有相同密钥的项目。

这个问题只是偶尔发生,我的应用程序大部分时间都工作正常。

基于NHibernate:System.Argument异常:已添加具有相同键的项目 https://stackoverflow.com/questions/4855149/nhibernate-system-argument-exception-an-item-with-the-same-key-has-already-bee我猜我的类不是线程安全的,这可以解释这个错误的间歇性。

using System;
using NHibernate;
using NHibernate.Cache;
using NHibernate.Cfg;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using WSS.Data.Domain;

namespace WSS.Data {
    public static class SessionFactory {
        private static ISessionFactory _factory = null;
        private static ISessionFactory GetFactory() {
            if (_factory == null) {
                NHibernate.Cfg.Configuration config;
                config = new NHibernate.Cfg.Configuration();
                config.Configure();
                if (config == null) {
                    throw new InvalidOperationException("NHibernate configuration is null.");
                }


                config.AddAssembly("WSS.Data");
                _factory = config.BuildSessionFactory();
                if (_factory == null) {
                    throw new InvalidOperationException("Call to Configuration.BuildSessionFactory() returned null.");
                }
            }
            return _factory;

        }

        private static ISessionFactory GetFluentFactory() {
            if(_factory == null) {
                _factory = Fluently.Configure()
                    .Database(MsSqlConfiguration.MsSql2000
                        .ConnectionString(c => c
                            .Is(ConnectionStrings.Auto))
                        .Cache(c => c
                            .UseQueryCache()
                            .ProviderClass())
                        .ShowSql())
                    .Mappings(m => m
                        .FluentMappings.AddFromAssemblyOf())
                    .BuildSessionFactory();
            }

            return _factory;
        }

        public static ISession OpenSession() {
            ISession session;
            session = GetFluentFactory().OpenSession();
            if (session == null) {
                throw new InvalidOperationException("Call to factory.OpenSession() returned null.");
            }
            return session;
        }
    }
}

通常的方法是创建一个只允许单次访问的互斥锁(可能在您的公共方法中)。看http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx

没有经过编译测试,但类似:

    private static Mutex _sessionMutex = new Mutex();

    public static ISession OpenSession() {
        ISession session;

        _sessionMutex.WaitOne();

        session = GetFluentFactory().OpenSession();
        if (session == null) {
            throw new InvalidOperationException("Call to factory.OpenSession() returned null.");
        }

        _sessionMutex.ReleaseMutex();
        return session;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使这个线程安全 的相关文章

  • 从 Fluent Nhibernate 获取表名

    在流畅的 nhibernate 中设置映射后 有没有办法从类类型中获取实体的表名 我读过常规的 nhiberante 你可以做类似的事情cfg GetClassMapping typeof Employee 我想做这样的事情来检索数据库表名
  • 这段代码中的 StringBuilder 变量线程安全吗?

    考虑下面的支柱Action类中 我正在使用StringBuilder执行方法中的变量 我的问题 变量是sb线程安全与否 public DemoAction extends Action public ActionForward execut
  • 在 iOS 中,线程安全意味着什么?

    我经常遇到 线程安全 这个关键术语 并想知道它的含义 例如 在 Firebase 或 Realm 中 某些对象被视为 线程安全 线程安全到底意味着什么 线程不安全 是否允许多个线程同时修改任何对象 线程安全 如果任何对象不允许被多个线程同时
  • 如何设置 NHibernate 事务的超时

    我需要在单个事务中完成大量数据库处理 包括使用 NHibernate 的一些处理 为了使所有内容在同一个事务中工作 我使用 NHibernate 的 Session 来启动它 并在其中登记其他工作的命令 一切都很顺利 直到我承诺为止 那时我
  • 急切地处置 ManualResetEvent

    我有一个类 它允许其他线程等待 直到它使用 a 完成操作ManualResetEventSlim 操作通常很简短 这个类没有明确的生命周期 因此没有一个地方可以轻松关闭该事件 相反 我想在事件完成后立即关闭该事件 一旦收到信号 并且在任何等
  • boost::uuids::random_generator 和多线程的唯一性

    当我使用单线程生成随机数时 生成的 4M uuid 中没有重复项 但如果我使用两个线程生成每个 1M 我会看到大约 16 20 个重复项 可能是什么原因 class TestUuid public std string GenerateUU
  • 关于僵尸进程和线程的问题

    自从我阅读一些有关进程和线程的新主题以来 我脑海中浮现出这些问题 如果有人能帮助我 我会很高兴 1 如果一个线程被标记为不可取消 然后该进程在临界区内被终止 会发生什么 2 我们的程序是否有操作系统已知的主线程 我的意思是操作系统是否给予程
  • PyQT 线程的最简单方法

    我在 PyQt 中有一个带有函数的 GUIaddImage image path 很容易想象 当需要将新图像添加到 QListWidget 中时会调用它 为了检测文件夹中的新图像 我使用threading Thread with watch
  • 在 C# 中使用布尔标志来停止线程运行是否安全

    我主要关心的是布尔标志 在没有任何同步的情况下使用它是否安全 我在几个地方读到它是原子的 包括文档 class MyTask private ManualResetEvent startSignal private CountDownLat
  • QList、QVector 或 std::vector 多线程使用

    我希望两个线程像这样工作 第一个线程会将值附加到向量 第二个线程将通过索引对元素进行只读访问 我可以在第二个线程开始读取之前创建互斥体并进行深度复制 但是这种方式真的很慢 如何在没有互斥体的情况下进行此操作 这里 STL向量和线程安全 ht
  • 更新数据库后 NHibernate 查询缓存不起作用

    我在 FluentNHibernate 中启用了二级缓存 Fluently Configure Database MsSqlConfiguration MsSql2005 ConnectionString connectionString
  • INotifyPropertyChanged 与线程

    我有一个 BindingList
  • 映射同一类中的两个引用,但引用类具有复合键

    我有以下数据库表 为了清楚起见 这些表已缩写 CREATE TABLE dbo prod uom prod id dbo uid NOT NULL Primary key uom type numeric 9 0 NOT NULL Prim
  • FluentNHibernate:AsSet()的作用是什么?

    在 Fluent Nhibernate 中 对 HasMany 或 HasManyToMany 关系指定 AsSet 有何影响 假设映射属性的类型是 Iesi Set 以下之间有什么区别 HasMany x gt x MySetProper
  • 运行线程时我的 Try Catch 块应该在哪里?

    就拿这个话题来说吧 Thread thread new Thread delegate Code thread Start 应该是在thread Start 或里面 Thread thread new Thread delegate try
  • PyGTK:带线程的 gobject.idle_add() 和 timeout_add()

    是否有任何明确的文档说明idle add timeout add 和 或它们安装的实际回调是否需要锁 任何类型 def work args 1 gtk gdk threads enter needed self ui change some
  • 枚举解析似乎不适用于 Fluent NHibernate

    我有一个数据访问类 带有一个名为 Salutation 的枚举 public enum Salutation Unknown 0 Dame 1 etc Mr 5 etc 我正在使用 NHibernate 保留该类 直到今天早上我还在使用 h
  • Lockfree 标准集合和教程或文章

    有人知道用于无锁常用数据类型的实现 即源代码 的好资源吗 我正在考虑列表 队列等 锁定实现非常容易找到 但我找不到无锁算法的示例以及 CAS 的工作原理以及如何使用它来实现这些结构 查看 Julian M Bucknall 的博客 他 详细
  • std::map 只读操作的线程安全

    我有一个 std map 用于将值 字段 ID 映射到人类可读的字符串 当我的程序在任何其他线程启动之前启动时 该映射会被初始化一次 之后就不会再被修改 现在 我为每个线程提供了这个 相当大的 映射的自己的副本 但这显然是内存使用效率低下
  • 这是 C# 的有效、惰性、线程安全的 Singleton 实现吗?

    我实现了这样的单例模式 public sealed class MyClass public static MyClass Instance get return SingletonHolder instance static class

随机推荐

  • Java - 使用流+ lambda 的多个集合的交集

    我有以下函数用于统一多个集合 包括重复元素 public static
  • oracle中的varchar2排序是如何工作的?

    我正在按 Varchar2 列对 Oracle SQL 查询进行排序 但是当我得到结果时 我无法正确理解顺序 这是逻辑顺序 第一个小写字母 数字 符号 在这里 我附上其中一项测试的结果排序 select FieldToOrder from
  • 如何从同一项目中的另一个 Kubernetes 集群调用 Kubernetes 集群公开的服务

    我有两个服务 集群 K1 中的 S1 和集群 K2 中的 S2 他们有不同的硬件要求 服务 S1 需要与 S2 通信 出于安全原因 我不想公开 S2 的公共 IP 在 K2 集群的计算实例上使用 NodePorts 和网络负载平衡会降低灵活
  • 如何调整 PyQt4 中 QMenuBar 的大小以适应 4K 显示

    我需要用 Python 编写一个带有用户界面的应用程序 我决定使用 PyQt4 来制作 GUI 它包含在 Python 的 Anaconda 发行版中 让 GUI 在 4K 显示器上流畅运行并非易事 默认情况下 大多数组件都太小 有些组件
  • 无法安装 vim 表格插件

    没有安装说明tabular https github com godlygeek tabular插入 我尝试将文件复制到正确的文件夹中 或者放入 vim bundle为了让病原体处理它 在这两种情况下 当我加载 vim 时 我都会收到以下错
  • HTML img src 位于根文件夹之外

    我试图引用源文件夹外部的图像文件 目前的结构是 Images img1 png My Source Folder Page 1 index html 从index html 文件中 我想引用img1 png 文件 我尝试了以下代码 img
  • IDLE 的子进程未建立连接。 IDLE 无法启动或个人防火墙软件阻止连接

    我尝试卸载它并搜索其他答案 它们都没有起作用 IDLE 打开 但我无法运行我编写的任何内容 在 Windows 10 中 1 输入 受控文件夹访问 2 选择 允许应用程序通过受控文件夹访问 对 UAC 选择 是 3 单击 添加允许的应用程序
  • java.lang.Math.PI 等于 GCC 的 M_PI 吗?

    我正在用 Java 和 C C 编写一些参考算法 其中一些算法使用 我希望每个算法的两种实现都能产生完全相同的结果 没有不同的舍入 迄今为止一直有效的一种方法是使用自定义的pi常量 在两种语言中完全相同 例如 3 14159 然而 当 Ja
  • 如何在 matplotlib 中创建具有垂直阴影的绘图[重复]

    这个问题在这里已经有答案了 I want to be able to replicate the following plot x 轴上有时间 y 轴上有 GDP GDP 线只是每日时间历史 无论其值如何 而衰退数据具有以下结构 从 1 1
  • ngrx 影响错误处理

    我有一个关于 ngrx效果的非常基本的问题 如何忽略效果执行期间发生的错误 使其不影响将来的效果执行 我的情况如下 我有一个动作 登录 和一个监听该动作的效果 如果此效果中发生错误 我想忽略它 当发生此错误后第二次调度 LOGIN 时 应再
  • MJML - 模板插值、动态数据、上下文

    经过大量搜索后 我很难找到如何 MJML https mjml io 处理动态数据和模板插值 我期待类似的事情 import mjml2html from mjml const context message Hello World con
  • 在 Flutter 中使用新版本更新(本机)Android 应用程序,同时保留数据库

    我有一个用java编写的android小应用程序 我正在使用flutter重写 是否可以通过保持 SQLite 数据库结构 包括所有数据 完整来过渡到新版本 我进行了测试 虽然我能够覆盖应用程序 但升级后数据丢失了 如果有人需要它 我可以从
  • 自定义视图转换为位图返回黑色图像

    我需要创建一个自定义视图 然后将其保存为 png 文件到 SD 卡中 现在我在 SD 卡中获取黑色图像 我无法在代码中找出问题所在 谁能帮我一下 布局文件
  • Visual Studio 2005 安装向导 - 为所有用户创建桌面快捷方式

    我正在使用安装向导项目为 Windows 窗体应用程序创建 msi 安装程序 我已将其配置为安装桌面快捷方式 但不幸的是 它仅在运行安装程序的用户的桌面上放置了一个快捷方式 有什么办法可以配置它在桌面上放置快捷方式all users 在项目
  • 尝试访问 upload.php 时,plupload 运行时返回 403 FORBIDDEN 错误

    介绍 我试图在一个可能复杂的环境中实现相对简单的事情 我想从 JavaScript 小部件上传文件 Netvibes UWA 格式 http dev netvibes com 到本地 Intranet 服务器 使用plupload jQue
  • 使用反射C#获取JsonProperty属性的名称

    我有一个关于 JsonProperties 的课程 public class MyClass JsonProperty Editor 1 public string Editor get set 我想避免在我的代码中出现魔术字符串 但我需要
  • 可以合并多个输入,每个输入都使用不同来源的 typeahead.js 吗?

    我有一个包含大量文本输入的表单 我想将其中 10 个文本输入与 Bloodhound 一起使用 typeahead js 我让它适用于其中的两个 它们都包括预取和远程数据源 但是 typeahead Bloodhound 的每个实例都有相当
  • 如何使用 Highcharts Drupal 7 模块

    如何使用 Highcharts Drupal 7 模块 我尝试使用视图集成 但设置不可用 但我看到了一个图像http drupal org files views settings png http drupal org files vie
  • Javascript、HTML 和 onClick - 函数未定义

    我正在尝试用 Javascript 制作一个指向富文本编辑器的 插入链接 按钮 基本上 它要做的就是将以下代码添加到其内容中 a href linkGoesHere textGoesHere a 问题是 someJSFunction 当用户
  • 如何使这个线程安全

    我有以下用于 Fluent NHibernate 的 SessionFactory 我收到一个错误 创建 SessionFactory 时使用了无效或不完整的配置 带有 InnerException 的 已添加具有相同密钥的项目 这个问题只