0

NHibernate を使用してクエリを作成し、複数の外部キーを検索しようとしています。

次のコードは、外部キーの 1 つだけを検索しているときに機能します。

            ICriteria query = Session.CreateCriteria<TblTeam>()
            .Add<TblTeam>(x => x.FldUrlSafeName == teamName)
            .CreateCriteria<TblTeam>(x => x.TblSportsType)
            .Add<TblSportsType>(x => x.FldUrlSafeName == sportsType);


        return query.UniqueResult<TblTeam>();

2 つの外部キーを検索する必要があるため、次のように作成しました。

            ICriteria query = Session.CreateCriteria<TblTeam>()
            .Add<TblTeam>(x => x.FldUrlSafeName == teamName)
            .CreateCriteria<TblTeam>(x => x.TblSportsType)
            .Add<TblSportsType>(x => x.FldUrlSafeName == sportsType)
            .CreateCriteria<TblTeam>(x => x.TblSportsOrganization)
            .Add<TblSportsOrganization>(x => x.FldUrlSafeName == sportsOrganization);

        return query.UniqueResult<TblTeam>();

残念ながら、これにより次のエラーが発生します。

「プロパティを解決できませんでした: TblSportsOrganization の: site.Core.TblSportsType」

TblSportsTypeではなくTblTeamに基準を追加できるように、いわば「一歩後退」させるにはどうすればよいですか?

4

1 に答える 1

1

IRC の何人かと話した後、私は答えを見つけました。元の ICriteria への参照を保持する必要があります。それは明らかだったはずです。

            ICriteria query = Session.CreateCriteria<TblTeam>();
        query.Add<TblTeam>(x => x.FldUrlSafeName == teamName);

        query.CreateCriteria<TblTeam>(x => x.TblSportsType)
            .Add<TblSportsType>(x => x.FldUrlSafeName == sportsType);

        query.CreateCriteria<TblTeam>(x => x.TblSportsOrganization)
            .Add<TblSportsOrganization>(x => x.FldUrlSafeName == sportsOrganization);

        return query.UniqueResult<TblTeam>();
于 2009-07-27T14:05:32.843 に答える