我在保存第一次创建的 session 实体时遇到问题...
每个实体都有一个步骤列表,每个步骤都有一个值列表。 (我在映射上使用逆函数)。实体和步骤也引用了数据库中已有的主值。所以有一种新旧对象的混合。
当我执行第一个保存时,我执行了 Session.Save(entity)
并且整个树都保存在数据库中。
问题在于探查器会警告类似的消息
无法确定具有指定标识符 ede6a5ee-b4bd-4f67-9c64-11ef85b7d6ff 的 StepValueEntity 是 transient 的还是分离的;查询数据库。在 session 中使用显式 Save() 或 Update() 来防止这种情况。
因为 nhibernate 在开始真正插入东西之前做了很多更新。
我做错了什么?
我已经尝试过类似迭代每个步骤和值的方法并明确保存它,但同样的事情正在发生。
编辑:
这就是我为身份列做映射的方式,也许这不会给 nhibernate 提供线索来了解什么是新的和已经持久存在的实体,我应该以另一种方式来做。
Id(x => x.Id).Column("GUID_PIPELINE_STEP_PARAMETER").GeneratedBy.Assigned();
问候
最佳答案
也许你忘记了交易,看看: http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions
using (var session = sessionFactory.OpenSesion())
using (var tx = session.BeginTransaction())
{
// perform your insert here
tx.Commit();
}
关于Nhibernate 探查器显示警告 "Use explicit Save or Update in session",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9755121/