NHibernate:从lazy = true变为fetch = join带回世界

时间:2009-10-12 02:41:07

标签: nhibernate nhibernate-mapping

我的应用程序中有一个User对象/映射。每个用户都有联系信息列表(电话,电子邮件等)

用户的映射包含:

<bag name="ContactInfo" table="contact_info" lazy="true" cascade="all">
    <key column="contact_id"/>
    <one-to-many class="...ContactInfo, ..."/>
</bag>

这工作正常,但我得到n + 1选择问题所以我需要优化它一点点。但由于某种原因,当我将其更改为连接并执行某些数据库操作时,NH开始更新数据库中的所有contact_info对象。当我说数据库操作时,我不是指changinf联系人。我的意思是什么。

任何人都知道为什么? THX

编辑:刚刚意识到它也是为lazy =“true”做的,但第二次是在加载对象之后。为什么遗留的问题

2 个答案:

答案 0 :(得分:1)

我想知道你的级联是否导致了这个问题。你的整个图表上有cascade = all吗?如果是这样,您可能需要重新评估您的生命周期策略。

这是来自NHibernate 1.2参考文献的第9.9节(强调添加)

  

映射关联(多对一,   或者集合)与cascade =“all”   将该关联标记为父/   孩子式的关系在哪里   保存/更新/删除父级   导致保存/更新/删除   子女。 另外,还有一点   引用持久性的孩子   父将导致保存/更新   孩子

答案 1 :(得分:0)

事实证明,ContactInfo中的枚举字段是个问题。我不介意,如果特定的字段是一个字符串,所以改变它解决了这个问题。