【问题标题】:How to implement searching with Include in ASP.NET CORE如何在 ASP.NET CORE 中使用 Include 实现搜索
【发布时间】:2022-11-04 22:52:42
【问题描述】:

我的项目中有两个模型。第一个是电影,第二个是流派。两者之间存在多对多的关系。所以我创建了另一个名为 MovieGenre 的模型。问题是我不知道如何在控制器中实现流派名称的搜索功能。我的意思是检索具有指定类型名称的电影。

这是三个模型

public class Movie
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<MovieGenre> MovieGenres { get; set; }
        public string Director { get; set; }
        public DateTime ReleaseDate { get; set; } = DateTime.Now;

    }

public class Genre
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<MovieGenre> MovieGenres { get; set; }
    }

public class MovieGenre
    {
        public int MovieId { get; set; }
        public int GenreId { get; set; }
        public Movie Movie { get; set; }
        public Genre Genre { get; set; }
    }

【问题讨论】:

  • 这回答了你的问题了吗? Filtering on Include in EF Core
  • 我不明白你为什么不只是在 Genre 模型中创建 List<Movie> 道具,不需要 MovieGenre 模型

标签: c# asp.net-core entity-framework-core


【解决方案1】:

此查询与Include 无关,但如何实现过滤器

var result = ctx.Movie
    .Where(m => m.MovieGenres.Any(mg => mg.Genre.Name == genreName))
    .ToList();

如果您使用的是 EF Core 5+,请考虑简化您的模型。中间实体可以省略/隐藏,查看documentation

public class Movie
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Genre> Genres { get; set; }
    public string Director { get; set; }
    public DateTime ReleaseDate { get; set; } = DateTime.Now;
}

public class Genre
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Movie> Movies { get; set; }
}
var result = ctx.Movie
    .Where(m => m.Genres.Any(g => g.Name == genreName))
    .ToList();

【讨论】:

  • 仅供参考:自 5.0 版以来,EF 核心支持不带中间实体的多对多关系。
  • @Oliver,感谢更新的答案。
  • 所以它不需要创建一个单独的连接表!谢啦!
  • @ahamadzooghi,实际上连接表会自动创建,所以你不需要自己做。
  • @SvyatoslavDanyliv 那么流畅的 API 呢?这是否意味着我们不再需要在 Fluent API 上编写任何代码? EF CORE 5+ 上是否全部自动化?
猜你喜欢
  • 2021-12-06
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多