La differenza tra First e Single in Entity Framework
LINQ to Entities implementa entrambi i metodi First e Single. Questi due metodi permettono di ottenere lo stesso risultato ovvero ottenere un singolo oggetto da una query. La differenza tra i metodi sta nel codice SQL generato.
Nel caso del metodo First, viene inviata al database una TOP 1 così che solo il primo record venga estratto. Nel caso del metodo Single, viene inviata al database una TOP 2 per verificare che effettivamente ci sia solo un record sul database. Se la query restituisce 2 record, viene sollevata un'eccezione.
Usare Single significa aumentare (seppur impercettibilmente) il numero di dati che potrebbe viaggiare per la rete. Tuttavia questo si verifica solo quando c'è una condizione di errore e quindi (vista la rarità dell'evento) è una situazione tollerabile. Di conseguenza l'uso di Single è consigliato quando si deve ottenere un solo record e si vuol essere sicuri che non ce ne siano altri per la stessa ricerca che effettuiamo.
ctx.Orders.Single(o => o.OrderId == 1)







