我的应用程序使用
Id(x => x.Id).GeneratedBy.Increment();
用于生成主键。我读过几篇关于Increment
的文章,我现在很担心:所有这些文章都说Increment
集群使用时很危险。但是,没有集群,它是一个具有单个SessionFactory
实例的常见 Web 应用程序。但是,有些并发线程都共享相同的SessionFactory
。
我应该担心吗?什么对象为新创建的实例提供其主键值?是线程安全的SessionFactory
,还是不安全的Session
?
查看源代码,IncrementGenerator
类的Generate()
方法使用 MethodImpl
属性和 MethodImplOptions.Synchronized
选项进行修饰。这表明对该方法的访问是同步的,因此是线程安全的。