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'