#126 - Simulare la clausola Single con Entity Framework

Quando si deve selezionare un solo record con Entity framework, si deve ricorrere al metodo Top della classe ObjectQuery o al metodo First di LINQ To Entities. Tuttavia, questi metodi restituiscono solamente il primo record trovato a prescindere da quanti effettivamente corrispondono ai criteri di ricerca. Se si vuole essere certi che una query ritorni un solo elemento, LINQ mette a disposizione l'operatore Single.
Questo operatore non è supportato in Entity Framework 1.0, ma lo sarà nella versione 4.0. Se tuttavia si vuole simulare questo comportamento da subito e lanciare un'eccezione se la query contiene più di un elemento, possiamo sfruttare il metodo Take estraendo solo i primi 2 record. In questo modo, se la query torna 2 record, possiamo sollevare un'eccezione.

var c = ctx.Orders.Where(o => 0.OrderNumber == 1).Take(2); 
if (c.Count() == 2)  
  throw new Exception("E' stato recuperato più di un record"); 
else 
  var obj = c.First();

Questo meccanismo, è lo stesso che viene utilizzato da Entity Framework 4.0.

IL CONTENUTO
SCRIPT VIA E-MAIL

Iscriviti alle nostre newsletter unoscript@lgiorno e Xcript per ricevere gli script via e-mail.

MEDIA
IN EVIDENZA
MISC