2014-09-30 10 views
5

ho una dll externall in cui seguito è definitagestione non trovato oggetto nel repository

namespace MoviesLibrary 
{ 
    public class MovieDataSource 
    { 
     public MovieDataSource(); 

     public int Create(MovieData movie); 
     public List<MovieData> GetAllData(); 
     public MovieData GetDataById(int id); 
     public void Update(MovieData movie); 
    } 
} 

io chiamo questa dll da repository per eseguire CRUD nella mia richiesta WebAPI, ora nella mia repostory sto scrivendo metodo GetMovieById in cui sono confuso su cosa restituire se un film non viene trovato nel repository e qual è il modo più appropriato per gestirlo in webapi?

MovieRepository

public Movie GetMovieById(int movieId) 
     { 

      MovieData movieData = new MovieDataSource().GetDataById(movieId); 
      if (movieData != null) 
     { 
      return MovieDataToMovieModel(movieData); 
     } 
     else 
     { 
      ?? 
     } 
    } 

MoviesController

/// <summary> 
/// Returns a movie 
/// </summary> 
/// <param name="movie">movieId</param> 
/// <returns>Movie</returns> 
    public Movie Get(int movieId) 
    { 
    //try 
    //{ 
     var movie = repository.GetMovieById(movieId); 
     if (movie == null) 
     { 
      throw new HttpResponseException(HttpStatusCode.NotFound); 
     } 
     return movie; 
    //} 
    //catch (Exception e) 
    //{ 
    // if (e is HttpResponseException) 
    // throw new HttpResponseException(HttpStatusCode.NotFound); 
    //} 
} 

risposta

2

Di solito, si dovrebbe generare un'eccezione, se un'entità non trovato per la sua chiave primaria.
A seconda casi d'uso, è possibile inserire due metodi nel repository (e codice esterno, che lavora con repository):

public MovieData GetDataById(int id); // this throws an exception, if not found 
public MovieData GetDataByIdOrDefault(int id); // this returns null, if not found 

e chiamare prima, se l'entità deve presente nella fonte di dati, o il secondo, se l'entità potrebbe essere presente nell'origine dati.

+0

thnx dennis, ma cosa scrivere nella sezione else di quel metodo? Un'ultima cosa che il metodo web api get, non dovrei controllare questo (film == null)? – F11

+0

Dipende dall'implementazione di 'GetDataById'. Non ho idea, come recupera i dati dal negozio. Inoltre, la gerarchia dei livelli sembra superflua, poiché 'MovieDataSource' e' MovieRepository' sembrano avere la stessa funzionalità. – Dennis

Problemi correlati