ITPub博客

首页 > 数据库 > 数据库开发技术 > .NET Core EF Core :高效数据访问与管理的利器

.NET Core EF Core :高效数据访问与管理的利器

原创 数据库开发技术 作者:后端Q 时间:2025-01-08 00:00:00 0 删除 编辑



一、EF Core 简介与优势 

(一)EF Core 简介

Entity Framework Core(简称 EF Core)是 .NET Core 中的一个开源对象关系映射(ORM)框架。它允许开发者以面向对象的方式与数据库进行交互,从而简化了数据库访问的复杂性。EF Core 是 Entity Framework 的跨平台版本,支持 .NET Core 以及 .NET Framework。

(二)EF Core 的优势

  1. 提高开发效率:EF Core 使得开发者可以使用 C# 代码表达数据操作,无需编写复杂的 SQL 语句。通过定义实体类和数据库上下文,EF Core 可以自动生成相应的数据库表结构和 SQL 语句。这大大减少了开发过程中编写 SQL 语句的工作量,提高了开发效率。
  2. 跨平台支持:EF Core 支持多种数据库系统,如 SQL Server、MySQL、PostgreSQL、SQLite 等。这意味着开发者可以在不同的平台和数据库环境中使用 EF Core,具有很好的可移植性。
  3. 强大的查询功能:EF Core 提供了丰富的 LINQ 查询功能,支持复杂的查询操作。通过 LINQ,开发者可以使用 C# 代码编写查询表达式,EF Core 会将其转换为相应的 SQL 语句。这使得查询操作更加直观和灵活。
  4. 数据库迁移功能:EF Core 的数据库迁移功能可以帮助开发者安全地更改数据库结构。通过迁移,开发者可以在开发过程中轻松地添加、修改或删除数据库表和字段。这为数据库版本管理和持续集成提供了便利。

二、EF Core 的核心概念 

(一)DbContext

DbContext 是 EF Core 的核心类,它代表了应用程序与数据库之间的会话。通过 DbContext,开发者可以查询和操作数据库。DbContext 包含了一系列的 DbSet 属性,每个 DbSet 对应一个数据库表。以下是一个简单的 DbContext 示例:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("YourConnectionString");
    }
}

在上述代码中,BloggingContext 继承自 DbContext,并定义了两个 DbSet 属性:Blogs 和 Posts。OnConfiguring 方法用于配置数据库连接字符串。

(二)实体类

实体类代表了数据库中的表。通过定义实体类的属性,可以映射数据库表中的列。EF Core 使用约定大于配置的原则,自动将实体类映射到数据库表。以下是一个简单的实体类示例:

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public int Rating { get; set; }
}

在上述代码中,Blog 类的属性 BlogId、Url 和 Rating 分别对应数据库表中的列。

(三)迁移

迁移是 EF Core 中用于管理数据库结构变更的机制。通过迁移,开发者可以在开发过程中轻松地添加、修改或删除数据库表和字段。迁移的步骤通常包括以下几步:

  1. 添加迁移:使用命令 Add-Migration 添加一个新的迁移。EF Core 会根据当前的模型和数据库结构生成迁移脚本。
  2. 更新数据库:使用命令 Update-Database 应用迁移,更新数据库结构。

三、EF Core 的常见操作 

(一)数据的增删改查

1. 增加数据

using (var context = new BloggingContext())
{
    var blog = new Blog { Url = "http://example.com" };
    context.Blogs.Add(blog);
    context.SaveChanges();
}

在上述代码中,创建了一个新的 Blog 实体,并将其添加到 Blogs DbSet 中。调用 SaveChanges 方法将数据保存到数据库。

2. 查询数据

using (var context = new BloggingContext())
{
    var blogs = context.Blogs
                       .Where(b => b.Rating > 3)
                       .OrderBy(b => b.Url)
                       .ToList();
}

在上述代码中,使用 LINQ 查询语句查询出评分大于 3 的博客,并按 URL 排序。

3. 修改数据

using (var context = new BloggingContext())
{
    var blog = context.Blogs.FirstOrDefault(b => b.BlogId == 1);
    if (blog != null)
    {
        blog.Url = "http://newexample.com";
        context.SaveChanges();
    }
}

在上述代码中,查询出 ID 为 1 的博客,并修改其 URL。调用 SaveChanges 方法将修改保存到数据库。

4. 删除数据

using (var context = new BloggingContext())
{
    var blog = context.Blogs.FirstOrDefault(b => b.BlogId == 1);
    if (blog != null)
    {
        context.Blogs.Remove(blog);
        context.SaveChanges();
    }
}

在上述代码中,查询出 ID 为 1 的博客,并将其从 Blogs DbSet 中移除。调用 SaveChanges 方法将删除操作保存到数据库。

(二)关系配置

EF Core 支持多种关系配置,包括一对一、一对多和多对多关系。以下是一个一对多关系的示例:

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

在上述代码中,Blog 类包含一个 Posts 属性,表示一个博客可以有多个帖子。Post 类包含一个 BlogId 属性和一个 Blog 属性,表示一个帖子属于一个博客。

四、EF Core 的性能优化 

(一)减少不必要的数据库往返

在 EF Core 7.0 中,SaveChanges 和 SaveChangesAsync 的性能得到了显著改善。在某些情况下,保存更改的速度比 EF Core 6.0 快四倍。其中大多数改进来自执行到数据库的往返次数更少。例如,EF Core 7.0 避免在不需要的情况下启动显式事务。

(二)优化查询编译和执行

EF Core 8/9 优化了查询编译和执行,从而减少了复杂查询的延迟。这些改进在执行大量动态查询或严重依赖 LINQ 进行业务逻辑的应用程序中尤为明显。

(三)使用批量操作

EF Core 8/9 增强了批量操作的性能。通过批量操作,可以一次性执行多个数据库操作,减少了数据库往返次数。例如,批量插入数据时,可以将多个插入操作合并为一个 SQL 语句。

(四)合理使用缓存

EF Core 的更改跟踪机制会缓存实体的状态。在处理大量数据时,可以考虑禁用更改跟踪,以提高查询性能。例如,在只读查询中,可以使用 AsNoTracking 方法:

var blogs = context.Blogs.AsNoTracking().ToList();

五、EF Core 的最新进展 

(一)EF Core 7.0

EF Core 7.0 引入了许多新功能和改进。除了性能方面的优化,还增强了对 JSON 数据的支持。例如,可以更高效地查询和映射 JSON 数据。

(二)EF Core 8/9

EF Core 8/9 继续优化性能和开发人员工作效率。它提供了


原文作者:后端Q;如有侵权,请联系管理员删除。

下一篇: .NET Core 性能监控
请登录后发表评论 登录
全部评论

注册时间:2023-01-22

  • 博文量
    1540
  • 访问量
    726023