2012-03-13 46 views
2

我有如下的复合键的映射关系:流利NHibernate的复合键不产生加盟对于引用的实体

CompositeId() 
      .KeyReference(x => x.CreatedBy, "member_key") 
      .KeyReference(x => x.Box, "box_key"); 

这工作正常进行简单的获取和插入,但它是不产生与中提到的表的连接在我尝试使用它们作为查询的一部分的参考中。

所以这个:

return _sessionFactory.GetCurrentSession().QueryOver<BoxMember>() 
      .Where(x => x.Box.Id == boxId) 
      .Where(x => x.Member.DeletedDate == null) 
      .Fetch(x => x.Box).Eager 
      .Fetch(x => x.CreatedBy).Eager 
      .List(); 

生成以下SQL:

SELECT this_.member_key  as member1_5_0_, 
     this_.box_key  as box2_5_0_ 
FROM box_member this_ 
WHERE this_.box_key = '2750e160-ba72-4a70-b554-9fd600e3cfd0' /* @p0 */ 
and m1_.deleted_date is null; 
+0

不会当你离开了它的过滤器上,加入? '.Where(x => x.Box.Id == boxId)' – Firo 2012-03-13 17:03:38

+0

你设法修复它吗? – Ha11owed 2013-09-16 17:58:15

+0

你需要在下面标记答案是正确的。 – BradLaney 2014-01-30 03:05:48

回答

3

我有完全一样的问题。添加引用映射帮助,但问题是没有意义的反正:

试试这个:

CompositeId() 
      .KeyReference(x => x.CreatedBy, "member_key") 
      .KeyReference(x => x.Box, "box_key"); 
Reference(x => x.CreatedBy); 
Reference(x => x.Box); 
+0

呃吓到了这个。这解决了我的问题。为什么地狱没有自动键入引用做到这一点? – BradLaney 2014-01-30 03:05:32