使用实体框架搜索单个项并将其作为数据传输对象返回?



我正在使用实体框架,我正在尝试根据主键在数据库中搜索单个对象。

我有一个电影数据库,在其他表中也有一些关系数据。

这是我目前使用的:

Movie newMovie = MovieRepository.FindSingle(id);

但这也会返回此行的所有关系。

我创建了一个名为MovieDetails的数据传输对象,它只包含以下字段:

public class MovieDetails
{
public int MovieID { get; set; }
public string MovieName { get; set; }
public int? BroughtBy { get; set; }
public string Director { get; set; }
public int? Rating { get; set; }
}

我尝试用这个搜索数据库,但没有成功。

public MovieDetails FindSingle(int? id)
{
MovieDetails newMovieDetails = dbContext.Movies.Select(x => new MovieDetails
{
MovieID = (int)id,
MovieName = x.MovieName,
BroughtBy = (int)x.BroughtBy,
Director = x.Director,
Rating = (int)x.Rating
}).FirstOrDefault();

如何在数据库中搜索单行并将其转换为此MovieDetails格式?

使用Where()筛选记录,然后Select()FirstOrDefault()

MovieDetails newMovieDetails = dbContext.Movies.Where(x => x.ID == id).Select(x => new MovieDetails
{
MovieID = x.ID,
MovieName = x.MovieName,
BroughtBy = (int)x.BroughtBy,
Director = x.Director,
Rating = (int)x.Rating
}).FirstOrDefault();

并替换此行:

Movie newMovie = MovieRepository.FindSingle(id);

通过这个:

MovieDetails newMovieDto = MovieRepository.FindSingle(id);

通过这样做解决了它:

using (MovieContext dbContext = new MovieContext())
{
var newMovieDetails = dbContext.Movies.FirstOrDefault(x => x.MovieID == id);
var MappedDetails = new MovieDetails
{
MovieID = newMovieDetails.MovieID,
MovieName = newMovieDetails.MovieName
};
return MappedDetails;
}
}

最新更新