2014-09-30 62 views
5

找不到对象我有其中以下定义处理在仓库

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); 
    } 
} 

我打电话从库中此DLL在我的WebAPI的应用程序执行CRUD,现在在我的repostory我写GetMovieById方法externall DLL其中我很困惑如果在存储库中找不到电影会返回什么内容,以及在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); 
    //} 
} 

回答

2

通常情况下,你应该抛出一个异常,如果实体不通过主键找到。
根据使用的情况下,你可以把你的资料库(和外部的代码,这与仓库工作)两种方法:

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

,并呼吁第一位的,如果实体必须存在于数据源,或第二个,如果实体可能存在于数据源中。

+0

thnx dennis,但在该方法的其他部分写什么?还有一件事情,然后网页API获取方法,我不应该检查这(电影==空)? – F11 2014-09-30 04:51:40

+0

它依赖于'GetDataById'实现。我不知道,它是如何从商店中检索数据的。此外,您的图层层次结构看起来多余,因为“MovieDataSource”和“MovieRepository”似乎具有相同的功能。 – Dennis 2014-09-30 05:02:25