1

我知道这是一个重复的帖子,但我的上下文不同。我从这里解决了这个问题。我的一些变化如下:

    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 进行数据访问的按钮时,就会发生这种情况。

4

1 回答 1

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();
    }
}
于 2012-07-11T19:19:48.143 回答