【发布时间】:2013-07-17 15:49:28
【问题描述】:
我无法将实体保存到 SQL Server 2005 数据库中。我将 NHibernate 2.0.0.3002 用于我的持久层。映射是典型的,带有一个整数ID,如下
<id name="Id" unsaved-value="0">
<column name="Id"/>
<generator class="identity" />
</id>
为简洁起见,我省略了其余部分。该应用程序正在使用具有通用保存方法的存储库类,如下所示
public void Save(T toSave)
{
Save(new T[] { toSave });
}
public void Save(IEnumerable<T> toSave)
{
using (ISession session = SessionFactory.OpenSession())
{
foreach (T item in toSave)
{
session.SaveOrUpdate(item);
}
session.Flush();
}
}
在会话上调用 SaveOrUpdate 时,会引发异常并显示“空标识符”消息。当我检查数据库时,该行已插入所有正确的值,所以我认为问题在于 NHibernate 尝试使用@@IDENTITY 返回的值设置实体的 Id 属性。我可以通过 SQL Profiler 看到正在调用 @@IDENTITY,所以我不明白为什么会抛出异常。
有其他人遇到过这个问题吗?
【问题讨论】:
-
您能否展示实际保存/更新的代码以及您尝试使用该 ID 的时间?
-
我已按要求添加了代码。
-
顺便说一句,您运行的是哪个版本的 NHibernate?
标签: nhibernate