我在第一次创建会话实体时遇到问题...
每个实体都有一个步骤列表,每个步骤都有一个值列表。 (我在映射上使用反转)。实体和步骤也引用了db中已有的主值。所以有一种新旧物体的混合。
当我第一次执行Save I do Session.Save(entity)
时,整个树都保存在数据库中。
该问题依赖于该分析器警告
之类的消息无法确定具有指定标识符ede6a5ee-b4bd-4f67-9c64-11ef85b7d6ff的StepValueEntity是暂时的还是分离的;查询数据库。在会话中使用显式Save()或Update()来防止这种情况。
因为在开始真正插入内容之前,nhibernate会进行大量更新。
我做错了什么?
我尝试过像迭代每一步和值,并明确地保存它,但同样的事情正在发生。
修改
这就是我为标识列进行映射的方法,也许这并不能让nhibernate知道什么是新的和已经存在的实体,我应该以另一种方式进行。
Id(x => x.Id).Column("GUID_PIPELINE_STEP_PARAMETER").GeneratedBy.Assigned();
此致
答案 0 :(得分:2)
也许你忘记了交易,看看: http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions
using (var session = sessionFactory.OpenSesion())
using (var tx = session.BeginTransaction())
{
// perform your insert here
tx.Commit();
}
答案 1 :(得分:0)
为了记录,我向nhusers小组提出了同样的问题,并且有些人提出了关于如何专注于这个主题的想法。
http://groups.google.com/group/nhusers/browse_thread/thread/bcc962d861c7f111
最推荐的选项和我选择的选项一直是不使用自动生成的ID并在映射中使用一个生成器。这样,NH很容易知道从未插入过具有空白ID的实体。
我选择Guid梳子生成器,它创建一个唯一的GUID来解决碎片索引问题