如何配置NHibernate以便我可以根据需要创建新的(全新)会话?

时间:2013-09-06 20:33:46

标签: c# session nhibernate

我有一个控制台应用程序,用于导入客户提供给我们的文件。

此文件有多条记录,需要导入。

如果我使用单个会话将它们全部导入,如果其中一个失败,它们都会失败。这太糟糕了。

我一直在努力想弄清楚如何创建一个会话。我读过的每一个资源都是关于如何在MVC项目中使用Structure map配置NHibernate以按请求建立会话。

我明白了。这对网络有好处。我知道。

我不能在这里。每个记录都需要一个新的会话。

我想要这个

foreach(var record in recordsToImport)
{
     //CREATE NEW SESSION or RANSACTION //I don't care about wrapping it in UnitOfWork
     //BEGIN TRANSACTION HERE
     myRepoClass.Update(record);
     //COMMIT TRANSACTION HERE

}

2 个答案:

答案 0 :(得分:1)

您可能只想在循环中使用新事务。

对于新交易,您的代码应该看起来像

ISession session = ...; 
// Create the session as you are currently doing it
// Pass the session into myRepoClass

foreach(var record in recordsToImport)
{
     using (ITransaction trx = session.BeginTransaction())
     {
         myRepoClass.Update(record);
         trx.Commit();
     }
}

答案 1 :(得分:0)

请参阅NHibernate documentation

  

...打开ISession非常简单:

ISession session = sessions.OpenSession();

...其中sessionsISessionFactory