已添加具有相同键的项目。以下方式是否正确?

时间:2012-07-11 18:18:42

标签: c# multithreading nhibernate fluent-nhibernate sessionfactory

我知道这是一个重复的帖子,但我的背景不同。 我从here处理了这个问题的解决方案。 我有些改变如下:

    private static Mutex _sessionMutex = new Mutex();
    public void OpenMySessionFactory(string conStr)
        {
            try
            {
                _sessionMutex.WaitOne();
                config = Fluently.Configure()
                .Database(MySQLConfiguration.Standard.ConnectionString(conStr))
                .Mappings(m => m.FluentMappings.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly()))
                .BuildConfiguration();
                sessionFactory = config.BuildSessionFactory();
                _sessionMutex.ReleaseMutex();
            }
            catch (Exception)
            {
                throw;
            }
        }

如果我按上述方式实施会有什么影响吗?

错误背后的原因:

  

已添加具有相同键的项目

当我双击任何必须使用Fluent NHibernate进行数据访问的按钮时,

正在出现。

1 个答案:

答案 0 :(得分:0)

请注意,如果发生异常,您将永远不会解锁互斥锁(控件将跳转到catch块并跳过解锁)。使用finally块执行此操作:

public void OpenMySessionFactory(string conStr)
{
    _sessionMutex.WaitOne();
    try
    {
        config = Fluently.Configure()
        .Database(MySQLConfiguration.Standard.ConnectionString(conStr))
        .Mappings(m => m.FluentMappings.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly()))
        .BuildConfiguration();
        sessionFactory = config.BuildSessionFactory();
    }
    catch (Exception)
    {
        throw;
    }
    finally
    {
        _sessionMutex.ReleaseMutex();
    }
}