C# 已添加具有相同密钥的项。下面的方法正确吗?
我知道这是一篇重复的文章,但我的背景不同。 我从头到尾讨论了这个问题的解决方案。 我知道一些变化如下:C# 已添加具有相同密钥的项。下面的方法正确吗?,c#,multithreading,nhibernate,fluent-nhibernate,sessionfactory,C#,Multithreading,Nhibernate,Fluent Nhibernate,Sessionfactory,我知道这是一篇重复的文章,但我的背景不同。 我从头到尾讨论了这个问题的解决方案。 我知道一些变化如下: private static Mutex _sessionMutex = new Mutex(); public void OpenMySessionFactory(string conStr) { try { _sessionMutex.WaitOne();
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进行数据访问有关的任何按钮时发生。请注意,如果发生异常,您将永远不会解锁互斥锁(控件将跳转到捕捉块并跳过解锁)。使用
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();
}
}