144 messaggi dal 26 febbraio 2007
Ciao,

sto facendo un progettino per approfondire entity framework core. Ho deciso di realizzare un'applicazione web per la vendita di prodotti, e volevo affrontare il problema della concorrenza.

Ovviamente è un caso che nella mia realtà non potrà mai verificarsi, ma visto che sto facendo questo progetto per studio, volevo gestire la concorrenza nel caso in cui la mia applicazione fosse utilizzata da tantissimi utenti (probabilmente l'esempio sarebbe preferibile su un sito di prenotazione di biglietti online).

In pratica pensavo di far aggiungere al carrello i prodotti disponibili, e poi in fase di ordine dovrei fare un controllo per vedere se le quantità di tutti i miei prodotti sono disponibli.

A questo punto pensavo di mettere i miei prodotti in una tabella temporanea e di scalarli subito dal magazzino, in questo caso se poi l'operazione non sarà conclusa (pagamtno responto o altri problemi) sarò in grado di ripristinare i prodotti in magazzino.

Mi è venuto un dubbio, se l'utente A e B hanno in magazzino lo stesso prodotto ed in contemporanea facessero l'ordine:

- Check Quntità Utente A: OK
- Check Quantità Utente B: OK

Essendo passati per entrambi il test di quantià, andrei per entrambi a rimuovere il prodotto dal magazzino, che a questo punto andrà in negativo perchè sarà venduto ad entrambi.

Ci sono delle best pratice per gestire questi casi limite?

Grazie
427 messaggi dal 13 novembre 2009
Metti in transazione la scrittura su db e un contraint >=0 della colonna giacenza. Così le operazioni sono in sequenza e ti scatta eccezione su contraint che gestisci
Ad esempio
Modificato da flaviovb il 28 gennaio 2020 09:40 -
144 messaggi dal 26 febbraio 2007
Si, anche io stavo pensando una cosa del genere.

Probabilmente potrei anche fare l'update mettendo in where QT_Magazzino-QT_Venduta>=0 in questo modo non farei l'update e fare il controllo in una sola istruzione anzichè check e poi update.

grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.