StatelessSession
和 Session
在 NHibernate 中有什么区别?
StatelessSession
和 Session
在 NHibernate 中有什么区别?
无状态会话不会跟踪检索到的实体。例如,对于常规 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
更新数据库? - JessNHibernate中的Session会将所有插入的数据缓存在会话级别的缓存中。
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();
}
}
以上代码在向数据库插入50000个学生时会抛出"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();
}
}