Meglio interrogare "prima" il db o catturare l'eccezione?

di surfernet il
3 risposte
Ciao a tutti ,vorrei evitare che una colonna abbia lo stesso valore per più righe ,per evitare questo ho aggiunto un vincolo unique,provando ad inserire lo stesso valore viene sollevata un eccezione,mi domandavo quanto era pesante produrre quest'eccezione e se forse conviene fare prima una select per verificare l'esistenza del valore (il codice è quanto meno migliorabile) :
 [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("IdMacroArea,NumeroRiga,NumeroColonna,TestoNomeMacroarea")] MacroAree macroAree)
        {
            if (ModelState.IsValid)
            {                
                try {
                    string TestoNomeMacroarea = macroAree.TestoNomeMacroarea;
                    var macro = await _context.MacroAree.FirstOrDefaultAsync(m => m.TestoNomeMacroarea == TestoNomeMacroarea);
                    if(macro==null) { 
                        _context.Add(macroAree);                    
                        await _context.SaveChangesAsync();
                    } else
                    {       
                        //da cambiare
                        string message = "esiste già un elemento con questo nome: ";
                        ViewData["messaggio"] = message + TestoNomeMacroarea;                        
                        return View();
                    }
                }
                catch(SqlException excp)
                {
                    //log here
                    string msg = excp.Message.ToString();
                }                
                return RedirectToAction(nameof(Index));
            }
            return View(macroAree);
        }
il codice potrebbe far sembrare superfluo il vincolo unique sulla colonna ma non mi sembra una grande soluzione..

3 Risposte

  • Dipende da QUANTE VOLTE ti capita di dover intercettare l'eccezione. La select la devi fare SEMPRE, l'eccezione la devi gestire SOLO se generata. La propagazione/gestione di un'eccezione e' sicuramente piu' efficiente di una query
  • Grazie della risposta, allora gestirò la cosa utilizzando l'eccezione,ciao
  • Se può esssere utile,
    alcuni dbms hanno anche l'opzione IGNORE DUPLICATE KEY
Devi accedere o registrarti per scrivere nel forum
3 risposte