NHibernate2查询在从代理获取集合时连接。这是正确的行为吗?

NHibernate2查询在从代理获取集合时连接。这是正确的行为吗?,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,这是我的班级: public class User { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual IList<UserFriend> Friends { get; protected set; } } public class UserFriend { public virtual int I

这是我的班级:

public class User
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }

    public virtual IList<UserFriend> Friends { get; protected set; }        
}

public class UserFriend
{
    public virtual int Id { get; set; }
    public virtual User User { get; set; }
    public virtual User Friend { get; set; }
}
在最后一行,NHibernate为我生成以下查询:

SELECT friends0_.UserId as UserId1_, friends0_.UserFriendId as UserFrie1_1_, friends0_.UserFriendId as UserFrie1_6_0_, friends0_.FriendId as FriendId6_0_, friends0_.UserId as UserId6_0_ FROM "UserFriend" friends0_ WHERE friends0_.UserId=@p0; @p0 = '1' 挑选 friends0\u0.UserId作为UserId1\u0, friends0\u.UserFriendId作为UserFrie1\u 1\u, friends0\u.UserFriendId为UserFrie1\u 6\u 0\u, friends0。FriendId为FriendId6\u 0, friends0\u.UserId作为UserId6\u 0\u 来自“UserFriend”friends0_uu,其中friends0_u.UserId=@p0@p0='1'
问题:为什么这个查询看起来非常复杂?它应该只选择3个字段(分别是
UserFriendId
UserId
FriendId
),对吗?或者NHibernate内部发生了什么事?

您应该看看由fluent NHibernate生成的映射,也许它生成了一些奇怪的东西

User user = repository.Load(1);
User friend = repository.Load(2);

UserFriend userFriend = new UserFriend();
userFriend.User = user;
userFriend.Friend = friend;

friendRepository.Save(userFriend);

var friends = user.Friends;
SELECT friends0_.UserId as UserId1_, friends0_.UserFriendId as UserFrie1_1_, friends0_.UserFriendId as UserFrie1_6_0_, friends0_.FriendId as FriendId6_0_, friends0_.UserId as UserId6_0_ FROM "UserFriend" friends0_ WHERE friends0_.UserId=@p0; @p0 = '1'