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.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Blazor Conference 2021 - Online
- Track 1: @dbochicchio e @cristiancivera con 'Blazor for absolute beginners'Track 2: @apomic80 con 'Dynamic UI with Blazor WebAssembly'Track 3: #aspilive Seguici live su => https://aspit.co/BlazorConf-21
- Track 1: @GiampaoloTUCCI con 'Progressive Web Apps with Blazor'Track 2: @dottor con 'Blazor Tips&Tricks'Track 3: #aspilive Seguici live su => https://aspit.co/BlazorConf-21
- Track 1: @cristiancivera con 'Using Components in Blazor'Track 2: @crad77 con 'Blazor and ASP.NET Core with GraphQL and HotChocolate'Track 3: #aspilive Seguici live su => https://aspit.co/BlazorConf-21