(.NET) - Criar serviços baseados em NHibernate com LazyLoad

0 respostas
Nicolas_Fernandes

E aí, galerinha do GUJ!
Tudo bem?

Quero implementar um serviço para rodar aqui no meu serviço, mas me deparei com uma dúvida: Eu, particularmente, ao "desenhar" o mapeamento do Fluent NHibernate, defino que todas as coleções sejam carregadas tardiamente (LazyLoad). Daí me surgiu uma dúvida: se eu chamo um serviço que carrega uma lista de pessoas para mim, abrindo e fechando a sessão, as coleções, ao serem invocadas pelo usuário do serviço não serão carregadas, porque não tem uma sessão ativa. É certo isso que disse? Ou eu tô viajando mesmo? Um exemplo prático (supondo que todas as classes já estejam mapeadas com as interfaces do WCF):
//Entidade
public class Pessoa
{
    public long ID { get; set; }
    public string Nome { get; set; }
    public IEnumerable<Endereco> Enderecos { get; set; }

    // Classe Endereco omitida...
}

// Classe de mapeamento
public class PessoaMapping : ClassMap<Pessoa>
{
    public PessoaMapping()
    {
        Schema("dbo");
        Table("PESSOA");
  
        Id(m => m.ID, "ID")
            .GeneratedBy
            .Sequence("dbo.SEQ_PESSOA");

        Map(m => m.Nome, "NOME")
            .Insert()
            .Update()
            .Length(50)
            .Not.Nullable();

        HasMany(m => m.Enderecos)
            .AsBag()
            .Inverse()
            .LazyLoad()
            .KeyColumn("PESSOA");
    }
}

//Classe de serviços
public class PessoaService
{
    public IEnumerable<Pessoa> GetPessoas()
    {
        IEnumerable<Pessoa> pessoas;
        using (ISession session = ConnectionFactory.CreateSession())
             pessoas = session.CreateCriteria().List<Pessoa>();
        
        return pessoas;
    }
}

Beleza, ao enviar essa coleção de Pessoas, a coleção de Endereços será enviada carregada? Ou não, já que foi mapeada como LazyLoad? Será que o meu chamador do serviço consegue acessar a coleção de Endereços?

Valeu, galerinha,
fiquem com Deus! :D

Criado 6 de fevereiro de 2013
Respostas 0
Participantes 1