Fluent Nhibernate第一至第一款

时间:2015-10-15 14:35:43

标签: c# nhibernate fluent-nhibernate

我想在一个到多个实体之间创建一个连接查询。正如我给出上面的例子;

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 

我知道必须有合理的方法来做到这一点,但我无法找到答案。谢谢你的帮助。

1 个答案:

答案 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)