1

同じ関連付けパスに2回アクセスしようとするコードが少しあり、それらは実際には同じエイリアスですが、クエリオブジェクトを使用しているため、2つの異なる場所にそれらがあり、エイリアスを取得する方法がよくわかりません.

いくつかのコードで混乱を解消できるかもしれません:

var privateBlogQuery = new BlogQuery()
    .ByUser(1)
    .RemoveHidden()
    .FetchUserDetails();


//<-------- In Blog Query object class: ------>

/// Gets all the private blogs the user has permissions to view
public BlogQuery ByUser(int userId)
{
    var authorisedUsers = null;

    this.Left.JoinQueryOver(r => r.AuthorisedUsers, () => authorisedUsers)
        .Where(r => r.User.Id == userId);

    return this;
}

/// Removes all private blogs user has marked to be hidden
public BlogQuery RemoveHidden()
{
    var authorisedUsers = null;

    this.Left.JoinQueryOver(r => r.AuthorisedUsers, () => authorisedUsers)
        .Where(r => !r.IsHidden);

    return this;
}

/// Loads up details of all users who have permission 
/// to view the private blog
public BlogQuery FetchUserDetails()
{
    var users = null;
    var authorisedUsers = null;

    this.Left.JoinQueryOver(r => r.AuthorisedUsers, () => authorisedUsers)
        .Left.JoinQueryOver(r => r.User, () => users);

    return this;
}

3 つの基準すべてを個別に使用していて、生成された sql がまさに私が必要としているものであり、それらが個別に使用されている限り、すべてがうまく機能する場合があります。

今、私はそれらをすべて一緒に使用する必要があり、同時に nhibernate が例外duplicate aliasをスローし、これら 3 つの関数のエイリアスを変更しましたが、例外が発生しましたduplicate association path

少しグーグルで調べたところ、それが休止状態のバグであることがわかり、このバグのいくつかの回避策も見つかりました

問題は、Query オブジェクトを使用しているため Query over であり、ここで関連付けパス/エイリアスを取得する方法がよくわかりません。

では、どうすればいいですか?

4

1 に答える 1