Pergunta

Eu tenho uma entidade A que as entidades H Hasmany B e as entidades C. Todas as entidades A, B e C têm algumas referências x, y e z que devem ser carregadas ansiosamente.

Quero ler no banco de dados todas as entidades A e carregar as coleções de B e C usando ansiosamente a API de critérios. Até agora, sou capaz de buscar as referências em 'A' ansiosamente. Mas quando as coleções são carregadas, as referências dentro delas são carregadas preguiçosamente.

Aqui está como eu faço isso

            AllEntities_A =
            _session.CreateCriteria(typeof(A))
            .SetFetchMode("x", FetchMode.Eager)
            .SetFetchMode("y", FetchMode.Eager)
            .List<A>().AsQueryable();

O mapeamento da entidade A usando fluente é como mostrado abaixo. _B e _c são ilistas privados para B&C, respectivamente em A.

        Id(c => c.SystemId);
        Version(c => c.Version);
        References(c => c.x).Cascade.All();
        References(c => c.y).Cascade.All();

        HasMany<B>(Reveal.Property<A>("_B"))
            .AsBag()                
            .Cascade.AllDeleteOrphan()
            .Not.LazyLoad()
            .Inverse()
            .Cache.ReadWrite().IncludeAll();
        HasMany<C>(Reveal.Property<A>("_C"))
            .AsBag()
            .Cascade.AllDeleteOrphan()
            .LazyLoad()
            .Inverse()
            .Cache.ReadWrite().IncludeAll();

Não quero fazer alterações no arquivo de mapeamento e gostaria de carregar toda a entidade A A ansiosamente. ou seja, eu deveria obter uma lista de A's onde haverá lista de B e C cujas propriedades de referência também serão carregadas ansiosamente

Foi útil?

Solução

Você está tentando fazer um produto cartesiano aqui. Eu acho que o Nibernate exige mapear as relações como conjuntos em vez de sacolas para fazer isso, já que as sacolas permitem duplicatas.

De qualquer forma, os produtos cartesianos são muito ineficientes. Use uma consulta multi-query ou futura.

Ver:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top