我可以阻止HasOne映射导致数据库调用吗?

时间:2014-04-11 12:46:04

标签: nhibernate fluent-nhibernate

我正在使用FluentNHibernate并且有两个具有1:1关系的类。 ItemA包括

public virtual ItemB { get; set; }

并用

映射
   HasOne(x => x.ItemB).ForeignKey("ItemID");

我只对ItemA感兴趣,但因为它有以下地图我在运行时看到两个数据库调用:

 var res = session.Query<ItemA>()
                  .SingleOrDefault(x => x.ItemId.ToString() =="AC3E30FF-E767-440F-AB1F-0000293C5A0C");

我得到了ItemA表的select和ItemB表的select。

如果我然后改回参考文献,我只得到一个:

References(x => x.ItemB).ForeignKey("ItemId");

这可能是微不足道的,但是我还有另一个类,它为我不需要使用的表提供了许多“HasOne”关系,但是选择查询变得相当复杂。

我尝试在映射中添加“Lazyload”,但这似乎没有改变任何东西。有没有办法保持HasOne关系,但能够为我的“查询”生成一个简单的单一“选择”查询(即从ItemA中选择[columns],其中ItemID = ...)?

1 个答案:

答案 0 :(得分:2)

不,没有办法如何实现这一目标。 One-to-one只是渴望,没有懒惰的设置会有所帮助。

但如上所述:5.1.11. one-to-one

  

一对一协会......

     

...或者,具有唯一约束的外键(从Employee到Person)可以表示为:

<many-to-one name="Person" class="Person" column="PERSON_ID" unique="true"/>`
// which is in fluent References()
  

通过在Person映射中添加以下内容,可以使这种关联成为双向的:

<one-to-one name="Employee" class="Employee" property-ref="Person"/>

所以,我建议使用References映射

引用(x =&gt; x.ItemB).Unique()。Cascade.All();

请参阅:How to do a fluent nhibernate one to one mapping?