Recupero oggetto e la raccolta figlio in NHibernate utilizzando Linq
-
05-09-2019 - |
Domanda
Ho un problema con LINQ to NHibernate per caricare un oggetto e con entusiasmo caricare una collezione bambino. Gli oggetti simile a questa:
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;}
}
Sto cercando di caricare un acquisto di un ID specifico e (con entusiasmo) tutto è OrderLines bambino utilizzando LINQ. La mia domanda è simile al seguente:
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();
}
Tuttavia, quando visualizzo l'ordine, la proprietà OrderLines
contiene solo un oggetto - il database ha sicuramente 3. Stranamente, se faccio un foreach intorno order
prima del ritorno io capisco tutte le voci 3 figlio - ma questo colpisce il database due volte.
Ho provato modificando la query per utilizzare Single()
invece, ma questo non funzionare.
Sto facendo qualcosa di sbagliato con LINQ? O è il mio uso di Expand
errato?
Grazie in anticipo,
Simon.
Nota:. Sto usando FluentNHibernate Automapping per creare il mio Mapping NH, e il mio database è un database SQLite (un file, non in memoria)
Soluzione
Sembra che questa caratteristica ha un bug:
FirstOrDefault () rompe fetchType = unirsi con LINQ to NHibernate
Date un'occhiata alla query di database generato, se ha TOP 1 clausola, questo può essere il problema.
Ricordate che LINQ to NHibernate è ancora lungi dall'essere pronti per la produzione, in modo da può verificarsi questo tipo di bug.