3

SQLServer2008でNhibernateを使用しています。

次のコードを実行しようとしています。

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

ただし、その行で、nhibernateがプロパティLanguage.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);
    }
}
4

1 に答える 1

8

以前に、エイリアスを使用して「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」メソッドは、一致するタイプの2番目の引数を受け入れます。私はあなたの指示をそれで更新するために自由を取りました。

于 2011-04-27T00:00:48.557 に答える