【问题标题】:Trouble mapping to DTOs with LINQ使用 LINQ 映射到 DTO 时遇到问题
【发布时间】:2018-10-04 19:18:22
【问题描述】:

我最近一直在使用 DTO,无法确定此代码存在的问题。

我将流派名称和电影名称映射到 GenreMovieDto。 Visual Studio 没有显示任何错误(红线等),但是当代码运行时,我得到以下信息:

  • $exception {"LINQ to Entities 不支持指定的类型成员 'Movies'。仅支持初始化程序、实体成员和实体导航属性。"} System.NotSupportedException

我的代码如下:

    public class Genre
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public IEnumerable<Movie> Movies { get; set; }
    }

    public class Movie
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string AgeRating { get; set; }
        public int NumberInStock { get; set; }

        public Genre Genre { get; set; }
    }

    public class GenreMovieDto
    {      
        public string GenreName { get; set; }
        public IEnumerable<Movie> Movies { get; set; }
    }

还有我的 API 调用:

        public IEnumerable<GenreMovieDto> GetGenresWithMovies()
        {
            var genresWithMovies = _context.Genres
                .Include(m => m.Movies)
                .Select(x => new GenreMovieDto
                {
                    GenreName = x.Name,
                    Movies = x.Movies    <<<<< CRASHES HERE
                })
                .ToList();

            return genresWithMovies;
        }

有什么想法吗?欢迎任何和所有建议/批评:P 我是来学习的。

提前致谢

【问题讨论】:

    标签: linq dto


    【解决方案1】:

    你可以这样做(EF 不支持 IEnumerable<...> 类型成员):

    public class Genre
    {
            public int Id { get; set; }
            public string Name { get; set; }
            public virtual List<Movie> Movies { get; set; }
    }
    

    【讨论】:

    • 所以 IEnumerable 是问题所在?知道为什么吗?顺便感谢您的帮助。真的很感激
    • @Gilmo,是的 IEnumerable 是问题所在。您可以尝试将该设置恢复为 IEnumerable,然后简单地尝试 _context.Genres.Include(m => m.Movies).ToList();
    猜你喜欢
    • 2021-09-06
    • 2019-11-26
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多