Recuperando objeto e coleção criança em NHibernate usando Linq
-
05-09-2019 - |
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)
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.