对引用实体有限制的NHibernate查询

本文关键字:NHibernate 查询 有限制 引用 实体 | 更新日期: 2023-09-27 17:52:58

我正在使用Nhibernate和SQL server 2008。

我正在尝试执行以下代码:

        var localization = session.QueryOver<T>()
            .Where(idFilter).AndRestrictionOn(x => x.Language.IETFTag).IsLike(tag + "%").SingleOrDefault();

然而,我在那一行得到一个异常,说nhibernate不能解析属性语言。IETFTag(或类似的东西).

我试过使用JoinQueryOver(),但它抱怨我有多个相关性在FROM子句或类似的奇怪的东西。我只是觉得我做错了什么。我怎样才能做我想做的?

我有以下映射:

internal class LocalizationMapping : ClassMap<Localization>
{
    public LocalizationMapping()
    {
        UseUnionSubclassForInheritanceMapping();
        Id(x => x.Id).GeneratedBy.HiLo("HiLo", "NextHi", "1000");
        References(x => x.Language);
    }
}
internal class LanguageMapping : ClassMap<Language>
{
    public LanguageMapping()
    {
        Id(x => x.Id);
        Map(x => x.DefaultName);
        Map(x => x.IETFTag);
    }
}
internal class ArticleLocalizationMapping : SubclassMap<ArticleLocalization>
{
    public ArticleLocalizationMapping()
    {
        Map(x => x.Name);
        Map(x => x.Description);
        References(x => x.Article);
    }
}

对引用实体有限制的NHibernate查询

之前需要使用别名对"Language"表进行连接。完整的查询应该是:

Language language = null;
var localization = session.QueryOver<Localization>()
            .JoinAlias(x => x.Language, () => language)
            .Where(idFilter)
            .AndRestrictionOn(() => language.IETFTag).IsLike(tag, MatchMode.End)
            .SingleOrDefault();

更多信息请访问:http://nhforge.org/blogs/nhibernate/archive/2009/12/17/queryover-in-nh-3-0.aspx

同样,"IsLike"方法接受第二个参数,该参数具有匹配的类型。我冒昧地把它更新到您的指令中。