我想在一个到多个实体之间创建一个连接查询。正如我给出上面的例子;
UserEntity
public class UserEntity
{
public virtual int Id {get;set;}
public virtual IList<Card> Cards{get;set;}
}
和CardEntity
public class CardEntity
{
public virtual int Id {get;set;}
public virtual int CardNumber {get;set;}
public virtual UserEntity User{get;set;}
}
UserMapping
public UserEntityMap()
{
Table("user");
Id(x => x.Id);
HasMany(x => x.Cards).KeyColumn("User_Id").Fetch().Join();
}
CardMapping
public CardEntityMap()
{
Table("card");
Id(x => x.Id);
Map(x => x.CardNumber);
References(x => x.User).Column("User_id");
}
查询
var query = _session.QueryOver<UserEntity>();
if(!string.IsNullOrEmpty(cardNumber)
{
query.Where(x=>x.Cards.Any(c=>c.CardNumber == cardNumber)) /// Tried this get an error
}
我希望看到像
这样的输出Select * from user u join card c on c.user_id=u.id where c.number=cardNumber
我知道必须有合理的方法来做到这一点,但我无法找到答案。谢谢你的帮助。
答案 0 :(得分:3)
您是否尝试过使用NHibernate.Linq而不是QueryOver?
如果您使用NHibernate.Linq&#39;在文件顶部,您可以使用
_session.Query<UserEntity>();
相反,它可能会为您提供您正在寻找的结果。
或者(使用QueryOver),您可能会使用JoinAlias:
Card card; // Used for alias below
query.JoinAlias(u => u.Cards, () => card)
.Where(() => card.CardNumber == cardNumber)