我正在使用实体框架,并且我尝试根据主键在数据库中搜索单个对象。
我有一个电影数据库,其他表中也有一些关系数据。
这就是我目前正在使用的内容:
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 格式?
答案 0 :(得分:4)
使用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);
答案 1 :(得分:0)
通过这样做解决了这个问题:
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;
}
}