【问题标题】:What is the difference between StatelessSession and Session in NHibernate?NHibernate 中的 StatelessSession 和 Session 有什么区别?
【发布时间】:2011-05-24 07:46:54
【问题描述】:

NHibernate 中的StatelessSessionSession 有什么区别?

【问题讨论】:

标签: c# nhibernate session


【解决方案1】:

无状态会话不跟踪检索到的实体。例如对于常规ISession 以下代码:

var session = sessionFactory.OpenSession()
using(var transaction = session.BeginTransaction()){
    var user = session.Get<User>(1);
    user.Name = "changed name";
    transaction.Commit();
}

将导致数据库中的更新。这种跟踪会消耗内存并使ISession 的性能随着时间的推移而下降,因为被跟踪实体的数量正在增长。

IStatelessSession 相同的代码不会做任何事情。当您需要加载大量数据并执行一些批处理操作时,会使用无状态会话。它可用于以更“ado.net”的风格处理大型数据集。

【讨论】:

  • 这个答案需要更多关于StatelessSession的细节。使用StatelessSession 更新数据库的代码示例怎么样?
【解决方案2】:

NHibernate 中的会话将所有插入的数据缓存在会话级缓存中。

 using (var session = sessionFact.OpenSession())
         {
            using (var trans = session.BeginTransaction())
            {
              for (int  = 0; i < 500000; i++)
              {
                 Student st = new Student(
                 {  
                      ID = 1,
                      FirstName = "Zia",
                      LastName = "Qammar"
                 });

                 session.Save(st);
               }

               trans.Commit();
            }
          }

在向数据库中插入 50,000 名学生时,上述代码会引发“OutOfMemoryException”异常。 NHibernate 提供的另一种方法是 StatelessSession,它将数据库中的数据保存在分离的对象中。

using (var session = sessionFact.OpenStatelessSession())
             {
                using (var trans = session.BeginTransaction())
                {
                  for (int  = 0; i < 500000; i++)
                  {
                     Student st = new Student(
                     {  
                          ID = 1,
                          FirstName = "Zia",
                          LastName = "Qammar"
                     });

                     session.Save(st);
                   }

                   trans.Commit();
                }
              }

【讨论】:

    猜你喜欢
    • 2014-06-27
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 2010-10-16
    • 2021-09-11
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    相关资源
    最近更新 更多