Pergunta

Eu tenho um problema usando Linq para NHibernate para carregar um objeto e ansiosamente carregar uma coleção filho. Os objetos parecido com este:

public class Order
{
    public Guid Id {get; set; }
    public IList<OrderLine> OrderLines {get;set;}
}
public class OrderLine
{
    public Guid Id {get;set;}
    public string Item {get;set;}
}

Estou tentando carregar uma Ordem com um ID específico e (ansiosamente) Tudo isso criança OrderLines usando Linq. Minha consulta esta aparência:

using (var s = _sessionFactory.OpenSession())
using (var tx = s.BeginTransaction())
{
    var order = from o in s.Linq<Order>().Expand("OrderLines")
                where o.Id == id
                select o;
    return order.First();
}

No entanto, quando eu apresentar a ordem, a propriedade OrderLines contém apenas um objeto - o banco de dados definitivamente tem 3. Curiosamente, se eu fizer um foreach em torno order antes do retorno eu recebo todos os itens 3 crianças - mas isto batidas do banco de dados duas vezes.

Eu tentei modificar a consulta para uso Single() vez, mas isso não quer trabalhar.

estou fazendo de errado algo com o LINQ? Ou é o meu uso de Expand incorreta?

Agradecemos antecipadamente,
Simon.

Nota:. Eu estou usando FluentNHibernate Automapping para criar o meu NH Mapping, e meu banco de dados é um banco de dados SQLite (um arquivo, não em memória)

Foi útil?

Solução

Parece que este recurso tem um erro:

FirstOrDefault () quebras FetchType = juntar com Linq para NHibernate

Veja a consulta do banco de dados gerado, se ele tem TOP 1 cláusula, isso pode ser o problema.

Lembre-se que o Linq para NHibernate ainda está longe de produção pronta, por isso este tipo de erros pode ocorrer.

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