Fluent Nhibernate where 子句一对多
Fluent Nhibernate where clause one to many
我想在一对多实体之间创建联合查询。正如我上面举的例子;
用户实体
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;}
}
用户映射
public UserEntityMap()
{
Table("user");
Id(x => x.Id);
HasMany(x => x.Cards).KeyColumn("User_Id").Fetch().Join();
}
卡片映射
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
我知道必须有一个合乎逻辑的方法来做到这一点,但我找不到。谢谢你的帮助。
您是否尝试过使用 NHibernate.Linq 而不是 QueryOver?
如果你在文件的顶部放一个 'using NHibernate.Linq',你就可以使用
_session.Query<UserEntity>();
相反,这可能会给您想要的结果。
或者(使用 QueryOver),您可能希望使用 JoinAlias:
Card card; // Used for alias below
query.JoinAlias(u => u.Cards, () => card)
.Where(() => card.CardNumber == cardNumber)
我想在一对多实体之间创建联合查询。正如我上面举的例子;
用户实体
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;}
}
用户映射
public UserEntityMap()
{
Table("user");
Id(x => x.Id);
HasMany(x => x.Cards).KeyColumn("User_Id").Fetch().Join();
}
卡片映射
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
我知道必须有一个合乎逻辑的方法来做到这一点,但我找不到。谢谢你的帮助。
您是否尝试过使用 NHibernate.Linq 而不是 QueryOver?
如果你在文件的顶部放一个 'using NHibernate.Linq',你就可以使用
_session.Query<UserEntity>();
相反,这可能会给您想要的结果。
或者(使用 QueryOver),您可能希望使用 JoinAlias:
Card card; // Used for alias below
query.JoinAlias(u => u.Cards, () => card)
.Where(() => card.CardNumber == cardNumber)