已添加具有相同密钥的项目。以下方法是否正确?
问题描述:
我知道这是一个重复的帖子,但我的上下文不同。 我从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;
}
}
是否有任何影响,如果我如上实施?后面的错误
原因:
具有相同键的项已被添加
当我双击具有使用功能NHibernate做数据访问的东西任何按钮是发生。
答
请注意,如果发生异常,您将永远无法解锁互斥锁(控件将跳转到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();
}
}