2
我有兩個實體,Post
和Tag
。 Post
實體具有代表這兩者之間的多對多連接的標籤集合(也就是說,每個職位可以具有任意數量的標籤,並且每個標籤可以與任意數量的職位關聯)。如何查詢NHibernate中的多對多關聯?
我想檢索所有有給定標籤的帖子。但是,我似乎無法獲得正確的查詢。我基本上想要的東西,這意味着同爲以下僞HQL:
from Posts p
where p.Tags contains (from Tags t where t.Name = :tagName)
order by p.DateTime
我發現的唯一的事情甚至接近這個a post by 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();
}
}