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)

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top