我有一个“Item”类,这个类有一个“Tags”集合。
Item
IList<string> Tags;
我的数据库看起来像这样:
Items
Id
Tags
ItemId
TagName
我正在尝试获取所有带有“x”和“y”标签的项目。我如何使用NHibernate(最好使用标准API)来做到这一点?这可能吗?
谢谢。
编辑: 我可以在不映射 Tag 对象的情况下做到这一点吗?它没有 1 个查询。 类似的东西
var q = 查询,将返回具有标签 x 或标签 y 的对象的所有 ID。
var res = 查询,将返回 (q.Execute()) 中具有 Id 的所有项目
最佳答案
尝试这样的事情:
session.CreateCriteria(typeof(Item))
.CreateCriteria("Tags", global::NHibernate.SqlCommand.JoinType.InnerJoin)
.Add(Expression.Eq("TagName", "x"))
.Add(Expression.Eq("TagName", "y"))
.List()
编辑:
确保 Item
和 Tag
之间具有双向关联。在 Fluent 中,这看起来像:
public class ItemMap : ClassMap<Item>
{
public ItemMap()
{
...
HasMany(x => x.Tags).Inverse();
...
}
}
public class TagMap : ClassMap<Tag>
{
public TagMap()
{
...
References<Item>(x => x.Item);
...
}
}
关于nhibernate - 使用 NHibernate 查询字符串集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/654632/