当前位置: 首页 > article >正文

Entity Framework Core介绍

Entity Framework Core(简称 EF Core)是一个开源的、跨平台的对象关系映射(ORM)框架,由 Microsoft 提供,专门用于 .NET 平台。EF Core 使得开发者能够通过 .NET 对象(例如类、属性等)来操作数据库,而不需要直接编写 SQL 查询。EF Core 提供了一种将数据库的表结构与应用程序中的对象模型进行映射的方式,使得数据访问变得更加简单和高效。

EF Core 的主要功能

EF Core 提供了一个高级的抽象层,帮助开发者将数据库操作转换为面向对象的编程模型。它包括以下主要功能:

  1. 对象关系映射(ORM)

    • EF Core 将数据库中的表映射到 .NET 类,将表的列映射到类的属性。这种映射使得开发者能够使用面向对象的方式操作数据库中的数据。
  2. 查询功能

    • EF Core 支持 LINQ(语言集成查询),使得开发者可以通过 C# 代码书写查询,而无需直接编写 SQL 查询。EF Core 会将 LINQ 查询自动转换为相应的 SQL 语句。
  3. 数据库迁移

    • EF Core 提供了数据库迁移功能,允许开发者在项目进展过程中自动更新数据库的结构。当模型发生变化时,EF Core 会生成迁移脚本,帮助同步数据库架构。
  4. 跨平台支持

    • EF Core 是跨平台的,支持在 Windows、Linux 和 macOS 上运行。因此,它可以用于构建多平台的应用程序。
  5. 支持多种数据库

    • EF Core 支持多种数据库系统,包括 SQL Server、SQLite、MySQL、PostgreSQL 等,也可以通过第三方提供的数据库提供程序连接到其他数据库。
  6. 性能优化

    • 相对于其前身 Entity Framework(EF 6.x),EF Core 在性能上进行了许多优化,使得它适用于高效的大型应用程序。
  7. 跟踪和变更检测

    • EF Core 会自动追踪实体对象的状态变化,并能在调用 SaveChanges() 方法时将这些变化同步到数据库。

EF Core 的基本概念

  1. DbContext

    • DbContext 是 EF Core 中的核心类,它代表了与数据库的连接。所有的数据库操作(查询、插入、更新、删除等)都通过 DbContext 进行。
    • 通过 DbContext,你可以访问数据库中的各种表(通常是通过定义 DbSet<T> 属性)。

    示例:

    public class ApplicationDbContext : DbContext
    {
        public DbSet<Customer> Customers { get; set; }
        public DbSet<Order> Orders { get; set; }
    }
    

  2. DbSet

    • DbSet<T> 是代表数据库表的集合,T 是实体类型(如 CustomerOrder 等)。通过 DbSet,你可以执行与数据库表相关的查询和操作。

    示例:

    var customers = context.Customers.Where(c => c.Name.Contains("John")).ToList();
    

  3. 模型(Model)

    • EF Core 中的模型通常由普通的 C# 类表示,这些类的属性对应数据库中的列。开发者通常会在这些类上使用数据注解或 Fluent API 来定义数据库表的映射规则。

    示例:

    public class Customer
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
    }
    

  4. 迁移(Migrations)

    • 迁移是 EF Core 中用于管理数据库架构变化的机制。当你的模型(例如 C# 类)发生变化时,迁移可以帮助你生成数据库脚本并将其应用到数据库中,以保持数据库和代码的一致性。
    • 使用命令行工具或包管理控制台可以方便地生成和应用迁移。

    示例:

    dotnet ef migrations add AddCustomerTable
    dotnet ef database update
    

EF Core 的工作流程

  1. 定义模型

    • 你首先需要定义与数据库表对应的 C# 类(即模型类)。
  2. 配置 DbContext

    • 通过继承 DbContext 类,并在其中定义 DbSet<T> 属性,配置 EF Core 来访问和操作你的数据库。
  3. 执行数据库操作

    • 通过 DbContext 对象,你可以使用 LINQ 查询数据库、插入数据、更新数据和删除数据。
  4. 迁移与更新数据库

    • 每当模型类发生变化时,使用迁移来同步数据库架构。EF Core 会根据模型的变化生成 SQL 脚本,并应用到数据库。

EF Core 的优缺点

优点:
  1. 简化数据库访问

    • EF Core 通过对象关系映射,使得开发者可以使用面向对象的方式操作数据库,减少了直接编写 SQL 查询的需要。
  2. LINQ 支持

    • 可以通过 LINQ 语法编写复杂的查询,EF Core 会自动将 LINQ 查询转换为优化后的 SQL 查询。
  3. 跨平台支持

    • EF Core 支持在 Windows、Linux 和 macOS 上运行,可以用于多平台应用的开发。
  4. 自动化迁移

    • EF Core 提供了强大的数据库迁移功能,使得数据库架构的更新变得更加简单和自动化。
  5. 多种数据库支持

    • 支持 SQL Server、MySQL、PostgreSQL、SQLite 等多种数据库,灵活性高。
  6. 性能优化

    • 相较于前代的 Entity Framework,EF Core 在性能上做了很多优化,能够更好地处理大规模的数据。
缺点:
  1. 学习曲线

    • 初学者可能需要一些时间来适应如何使用 EF Core,特别是在数据库迁移、关系映射等方面。
  2. 复杂的查询性能问题

    • 对于非常复杂的查询,EF Core 生成的 SQL 可能不如手写的 SQL 高效,因此在性能敏感的应用中,可能需要优化查询。
  3. 有限的功能支持

    • EF Core 的某些功能(如存储过程的支持、复杂的继承映射等)在早期版本中不如传统的 Entity Framework 完善,尽管随着版本更新,越来越多的功能得到了补充。

EF Core 的使用示例

假设我们有一个 CustomerOrder 两个实体,下面是如何使用 EF Core 来进行简单的数据操作:

  1. 定义实体类

    public class Customer
    {
        public int CustomerId { get; set; }
        public string Name { get; set; }
        public List<Order> Orders { get; set; }
    }
    
    public class Order
    {
        public int OrderId { get; set; }
        public decimal Amount { get; set; }
        public int CustomerId { get; set; }
        public Customer Customer { get; set; }
    }
    

  2. 配置 DbContext

    public class ApplicationDbContext : DbContext
    {
        public DbSet<Customer> Customers { get; set; }
        public DbSet<Order> Orders { get; set; }
    
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("your_connection_string");
        }
    }
    

  3. 查询数据

    using (var context = new ApplicationDbContext())
    {
        var customer = context.Customers
            .Where(c => c.Name.Contains("John"))
            .FirstOrDefault();
    
        Console.WriteLine(customer.Name);
    }
    

  4. 插入数据

    using (var context = new ApplicationDbContext())
    {
        var newCustomer = new Customer { Name = "Jane Doe" };
        context.Customers.Add(newCustomer);
        context.SaveChanges();
    }
    

结论

EF Core 是一个强大的 ORM 框架,可以大大简化数据库的操作和管理。它支持多种数据库系统,具有跨平台能力,并且提供了强大的功能,如迁移、LINQ 查询、性能优化等。对于需要进行数据库交互的 .NET 应用程序来说,EF Core 是一个非常有用的工具。


http://www.kler.cn/a/466452.html

相关文章:

  • 使用LINUX的dd命令制作自己的img镜像
  • Redis - 5 ( 18000 字 Redis 入门级教程 )
  • 【sql】CAST(GROUP_CONCAT())实现一对多对象json输出
  • java.lang.Error: FFmpegKit failed to start on brand:
  • redis源码系列--(四)--redis cluster
  • 2025-01-04 Unity插件 YodaSheet1 —— 插件介绍
  • React第二十一章(useCallback)
  • Kafka 快速实战及基本原理详解解析-01
  • Ubuntu Server安装谷歌浏览器
  • 多模态论文笔记——Coca
  • MATLAB中dbstack函数用法
  • 【pyqt】(四)Designer布局
  • 根据 el-dialog 的高度动态计算 el-table 的高度
  • 常规继承类对象大小
  • Cause: java.sql.SQLException: sql injection violation, comment not allow异常问题处理
  • 【MySQL基础篇】三、表结构的操作
  • 最新MySQL面试题(2025超详细版)
  • 【GeekBand】C++设计模式笔记22_Chain of Responsibility_职责链
  • AWS Lambda基础知识
  • 【Vue】分享一个快速入门的前端框架以及如何搭建
  • 非docker方式部署openwebui过程记录
  • linux-centos-安装miniconda3
  • 掌控ctf-2月赛
  • 区块链安全常见的攻击分析——可预测随机数漏洞 (Predictable Randomness Vulnerability)【12】
  • 路由基本配置实验
  • 《一个孤独漫步者的遐想-卢梭》阅读笔记