我正在使用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 = ...)?
答案 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();