我已经将NHibernate会话上的FlushMode属性设置为FlushMode.Never,但是当我调用session.Save(User)时,无论如何都会调用数据库.这是怎么回事?我认为在调用Flush()之前不应该插入.
编辑:我发现了问题,我将主键更改为guid并且工作正常.是否有其他类型(即没有guid主键)可以工作?我宁愿有一个数字而不是一个guid ......
你使用的是原生发电机,对吧?
这个问题在于,由于它是生成ID的DB,因此NHibernate需要往返才能获取它.例如,对于服务器的标识字段,必须在SCOPE_IDENTITY()返回有效密钥之前执行实际的INSERT语句.并且安全地执行此操作的唯一方法是刷新会话.
作为guids和identity的替代品,您可以尝试使用"增量"生成器来查看它是否符合您的需求:http: //www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/mapping.html#mapping -declaration-ID发电机
您应该知道,如果您对应用程序进行集群,或者您将某些其他进程或应用程序插入到同一个表中,则此方法将不可行.
PS:如需进一步阅读,请尝试http://unhandled-exceptions.com/blog/index.php/2008/12/11/on-choosing-an-identity-type/