Запрос NHibernate2 подключается при получении коллекции с прокси. Это правильное поведение?

Это мой класс:

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; }
}

Это мое отображение (Fluent 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();
    }
}

Проблема в том, когда я выполняю этот код:

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;

В последней строке NHibernate сгенерирует для меня этот запрос:

SELECT
  friends0_.UserId as UserId1_,
  friends0_.UserFriendId as UserFrie1
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; }
}
, friends0_.UserFriendId as UserFrie1FriendId0_, friends0_.FriendId as FriendId6_0_, friends0_.UserId as UserId6_0_ FROM "UserFriend" friends0_ WHERE friends0_.UserId=@p0; @p0 = '1'

ВОПРОС: Почему запрос выглядит очень зашитым? Он должен выбрать только 3 поля (это UserFriendId, UserId, FriendId) Я прав? или что-то происходит внутри NHibernate?


person ensecoz    schedule 02.01.2009    source источник


Ответы (1)


Вам следует взглянуть на сопоставление, созданное fluent-nhibernate, возможно, это сгенерировало что-то странное.

person sirrocco    schedule 11.01.2009