我读过很多帖子说多线程应用程序必须为每个线程使用单独的会话。也许我不明白锁定是如何工作的,但是如果我在所有存储库方法中锁定会话,那不会使单个静态会话线程安全吗?
像:
public void SaveOrUpdate(T instance)
{
if (instance == null) return;
lock (_session)
using (ITransaction transaction = _session.BeginTransaction())
{
lock (instance)
{
_session.SaveOrUpdate(instance);
transaction.Commit();
}
}
}
编辑:
请考虑我正在编写的应用程序的上下文/类型:
不是多用户,也不是典型的用户交互,而是一个自动运行的机器人,它可以对财务数据和订单更新等远程事件做出反应,并据此执行任务和保存。间歇性地,这可以创建每秒最多 10 次保存的集群。通常,每次都需要保存同一个对象图。此外,在启动时,程序确实将完整的数据库加载到实体对象图中。所以它基本上只读取一次,然后在运行时执行 SaveOrUpdates。