C'est ma classe:La requête NHibernate2 est câblée lors de l'extraction de la collection à partir du proxy. Est-ce que c'est un comportement correct?
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; }
}
Ceci est ma cartographie (Courant NHibernate):
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id, "UserId").GeneratedBy.Identity();
HasMany<UserFriend>(x => x.Friends);
}
}
public class UserFriendMap : ClassMap<UserFriend>
{
public UserFriendMap()
{
Id(x => x.Id, "UserFriendId").GeneratedBy.Identity();
References<User>(x => x.User).TheColumnNameIs("UserId").CanNotBeNull();
References<User>(x => x.Friend).TheColumnNameIs("FriendId").CanNotBeNull();
}
}
Le problème est quand j'exécute ce code:
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;
A la dernière ligne , NHibernate générer cette requête pour moi:
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 [email protected]; @p0 = '1'
QUESTION: Pourquoi la requête semble-t-elle très câblée? Il devrait sélectionner seulement 3 champs (qui sont UserFriendId
, UserId
, FriendId
) Ai-je raison? ou il se passe quelque chose à l'intérieur de NHibernate?