使用Entity Framework搜索单个项目并将其作为数据传输对象返回?

时间:2018-05-16 13:28:19

标签: c# entity-framework lambda

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

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

这就是我目前正在使用的内容:

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 格式?

2 个答案:

答案 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;
        }
    }