【发布时间】:2011-10-25 10:29:18
【问题描述】:
看起来 NH 只获取一次 MAX(ID),首先插入然后在内部存储这个值,这在其他进程插入数据时给我带来了一些问题。然后我没有实际的 ID 并引发重复键异常。
假设我们有表Cats
CREATE TABLE Cats(ID int, Name varchar(25))
然后我们用 FluentNhibernate 做了相应的映射
public class CatMap : ClassMap<Cat>
{
public CatMap()
{
Id(m=>m.ID).GeneratedBy.Increment();
Map(m=>.Name);
}
}
我想要实现的只是插入我的Cat 记录,其ID 由NHibernate 生成,使用SELECT MAX(ID) FROM Cats 在任何插入之前。在任何提交 dosnt 工作后执行 Session.Flush。我已经使用 SQL Server 探查器进行了一些调查,并且这个 sql 语句只执行一次(在第一次插入时) - 其他插入不会强制检索实际的 MAX(ID)。我知道像 HiLo 这样的其他算法更好,但我无法替代它。
【问题讨论】: