我知道这是一个重复的帖子,但我的背景不同。 我从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进行数据访问的按钮时,已添加具有相同键的项目
正在出现。
答案 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();
}
}