2017-09-19 1 views
0

J'essaie un système de réservation, je veux mettre des contrôles sur l'aspect de la réservation. Je veux utiliser Si et puis les cas. Je veux contrôler de telle sorte que si le nombre de réservation est de 4, alors il lèvera une exception et arrêtera d'insérer dans la base de données.Réglage des contrôles dans les classes

public ApiResult<TimeModelExtended> SaveBooking(Booking booking) 
    { 
     AchimotaGCDb repo = new AchimotaGCDb(); 

     var result = new ApiResult<TimeModelExtended>(); 
     try 
     { 
      booking.PlayDate = getPlayDate(booking.RefCode); 

      Int16 nb = getNbBooked(booking.RefCode); 

      if (nb == 4) 
      { 
       Exception ex = new Exception(); 
       result.Successfull = 0; 
       result.InternalError = ex.Message; 
       result.Error = "Booking slot is full"; 
      } 

      else if (nb == 0) 
      { 
       booking.BookingStatus = 1;//Booked already 
      } 
      else 
      { 
       booking.BookingStatus = 0;//Reservation already 
      } 

      repo.Insert(booking); 

      result.Successfull = 1; 

      result = GetOneteeTime(booking.RefCode); 

     } 
     catch (Exception ex) 
     { 
      result.Successfull = 0; 
      result.InternalError = ex.Message; 
      result.Error = "Error from server"; 
     } 
     finally 
     { 
      repo.Dispose(); 
     } 

     return result; 
    } 

aider à résoudre ce problème.

+0

double possible de [Comment lancer exception dans l'API Web?] (Https: //stackoverflow.com/questions/14607844/how-to-throw-exception-in-web-api) – meorfi

+0

Sans rapport: 'Int16' - pourquoi l'utilisez-vous? – Fildor

Répondre

2

Si vous voulez lancer une exception, vous devez jeter vraiment:

if (nb == 4) 
     { 
      throw new Exception("Booking slot is full."); 
     } 

Mais je ne pense pas lancer une exception est une bonne idée. Lancer une exception et valider est une chose différente.

Voici ma suggestion:

if (nb == 4) 
     { 
      return result = new ApiResult<TimeModelExtended>() 
         { 
          Successfull = 0, 
          InternalError = "Other messages", 
          Error = ""Booking slot is full." 
         }; 
     } 

Cela renverra comme message de résultat que rien ne continuera à moins que vous assurer que nb != 4

+0

Sachez également que s'il lançait une exception avec le reste du code comme indiqué en question, il l'attraperait dans la même méthode en modifiant le résultat ... donc c'est complètement superflu. Votre suggestion est la voie à suivre. – Fildor

+0

Cela signifie-t-il que lorsque nb = 4, l'exception sera renvoyée et lorsque nb <> 4, la réservation est insérée dans la base de données? – lytakyn

+0

Oui, sauf si vous voulez toujours insérer même si vous voulez lancer une exception? Je peux éditer ma réponse si c'est le cas. –