[英]How to query across many-to-many association in NHibernate?
我有兩個實體, Post
和Tag
。 Post
實體具有一個Tag集合,該集合表示兩者之間的多對多聯接(即,每個帖子可以具有任意數量的標簽,並且每個標簽可以與任意數量的帖子相關聯)。
我正在嘗試檢索所有具有給定標簽的帖子。 但是,我似乎無法正確獲得此查詢。 我本質上想要的東西與以下偽HQL相同:
from Posts p
where p.Tags contains (from Tags t where t.Name = :tagName)
order by p.DateTime
我發現,唯一能做到這一點的就是Ayende的帖子 。 但是,他的方法要求另一側的實體(在我的示例中為Tag
)具有一個集合,該集合表示多對多的另一端。 我沒有這個,也不是真的希望擁有它。 我發現很難相信這不可能完成。 我想念什么?
我的實體和映射如下所示(簡化):
public class Post {
public virtual int Id { get; set; }
public virtual string Title { get; set; }
private IList<Tag> tags = new List<Tag>();
public virtual IEnumerable<Tag> Tags {
get { return tags; }
}
public virtual void AddTag(Tag tag) {
this.tags.Add(tag);
}
}
public class PostMap : ClassMap<Post> {
public PostMap() {
Id(x => x.Id).GeneratedBy.HiLo("99");
Map(x => x.Title);
HasManyToMany(x => x.Tags);
}
}
// ----
public class Tag {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class TagMap : ClassMap<Tag> {
public TagMap () {
Id(x => x.Id).GeneratedBy.HiLo("99");
Map(x => x.Name).Unique();
}
}
看起來我找到了答案。 不太確定為什么我沒想到昨天,但是您可以將其轉過來並in
使用。
from Post p
where (
select t
from Tag t
where t.Name = :tagName
) in elements(p.Tags)
order by p.DateTime
比我想的要容易。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.