在使用 Entity Framework Core(EF Core)进行数据库操作时,经常会遇到需要同时获取主表及其关联表数据的场景。例如,查询订单时同时获取客户信息、商品详情等。这时,Include 方法就派上了大用场!本文将从零开始,手把手教你如何在 C# 中使用 EF Core 的 Include 查询来加载关联数据,即使是编程小白也能轻松上手。
Include 是 EF Core 提供的一种预加载(Eager Loading)机制,用于在一次数据库查询中同时加载实体及其关联的导航属性数据。这可以避免“N+1 查询问题”——即先查主表,再为每条记录单独查询关联表,导致大量数据库往返,严重影响性能。
假设我们要管理一个简单的博客系统,包含 Blog(博客)和 Post(文章)两个实体:
// Blog.cspublic class Blog{ public int Id { get; set; } public string Name { get; set; } = string.Empty; // 导航属性:一个博客有多篇文章 public List<Post> Posts { get; set; } = new();}// Post.cspublic class Post{ public int Id { get; set; } public string Title { get; set; } = string.Empty; public string Content { get; set; } = string.Empty; // 外键 public int BlogId { get; set; } // 导航属性:一篇文章属于一个博客 public Blog Blog { get; set; } = null!;}// ApplicationDbContext.cspublic class ApplicationDbContext : DbContext{ public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("你的连接字符串"); }} 现在,我们想查询所有博客,并同时加载它们对应的文章列表。只需在查询中调用 Include 即可:
using var context = new ApplicationDbContext();var blogs = context.Blogs .Include(b => b.Posts) // 加载每个博客的 Posts 导航属性 .ToList();foreach (var blog in blogs){ Console.WriteLine($"博客: {blog.Name}"); foreach (var post in blog.Posts) { Console.WriteLine($" - 文章: {post.Title}"); }} 这样,EF Core 会生成一条包含 JOIN 的 SQL 语句,一次性把博客和文章都查出来,大大提升性能。
如果关联层级更深,比如 Blog → Posts → Author,可以使用 ThenInclude 继续深入加载:
// 假设 Post 有一个 Author 导航属性var blogs = context.Blogs .Include(b => b.Posts) .ThenInclude(p => p.Author) .ToList(); 你也可以多次调用 Include 来加载多个不同的导航属性:
var blogs = context.Blogs .Include(b => b.Posts) .Include(b => b.Owner) // 假设 Blog 还有一个 Owner 属性 .ToList(); Include,避免加载不必要的数据。Skip/Take)后再使用 Include,防止内存溢出。Include 的结果进行过滤(使用 Where),但需注意兼容性。通过本文,你已经掌握了 EF Core Include 查询 的核心用法,包括基本加载、多级关联以及性能优化建议。合理使用 Include 不仅能简化代码,还能显著提升应用性能。记住,Entity Framework Core 关联数据加载 是开发高效数据驱动应用的关键技能之一。
希望这篇教程能帮助你在 C# 项目中更好地使用 EF Core 导航属性 和 EF Core 预加载性能优化 技术。动手试试吧!
本文由主机测评网于2025-12-24发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251212086.html