同じ関連付けパスに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 であり、ここで関連付けパス/エイリアスを取得する方法がよくわかりません。
では、どうすればいいですか?