C# EF框架(Entity Framework)

EF框架(Entity Framework)

EF概念

Entity Framework (EF) 是一个对象关系映射(Object-Relational Mapping,简称ORM)框架,它允许开发者使用面向对象的方式来处理数据库操作。EF 可以自动将数据库中的表映射为应用程序中的对象,这样开发者就可以使用这些对象来进行数据库操作,而不需要编写大量的 SQL 代码。

EF 的主要组成部分:

  1. Entity Data Model (EDM)

    • EDM 是 Entity Framework 的核心,它定义了应用程序的数据模型。
    • 它包括三个主要部分:概念模型(CSDL)、存储模型(SSDL)和映射模型(MSL)。
  2. 概念模型 (CSDL)

    • 概念模型定义了应用程序中使用的实体和关系。
    • 它是一个抽象层,独立于数据库的具体实现。
  3. 存储模型 (SSDL)

    • 存储模型定义了数据库的结构,包括表、列、关系等。
    • 它与数据库的物理结构紧密相关。
  4. 映射模型 (MSL)

    • 映射模型定义了概念模型和存储模型之间的映射关系。
    • 它指定了概念模型中的实体如何映射到存储模型中的表。

Entity Framework 的一些核心概念:

  1. DbContext

    • DbContext 是 EF 的核心,它表示数据库会话,用于查询和保存数据。
    • 它包含 DbSet 属性,每个属性代表数据库中的一个表。
  2. DbSet

    • DbSet 是 DbContext 的一个属性,代表数据库中的一个表。
    • 它提供了 LINQ 方法,用于查询和操作数据库中的数据。
  3. Entity

    • Entity 是数据库表中的一行数据,它是一个对象,与数据库表的列相对应。
    • 在 EF 中,实体类通常通过继承 DbContext 中的 DbSet 来定义。
  4. Entity Set

    • Entity Set 是一组具有相同类型的实体对象。
    • 在数据库中,它通常对应于一个表。
  5. Model

    • Model 是数据库的抽象表示,它定义了实体和它们之间的关系。
    • EF 使用 Code First、Database First 或 Model First 来创建模型。
  6. Code First

    • Code First 是一种开发模式,开发者首先编写实体类,然后 EF 根据这些类生成数据库。
    • 它允许开发者使用纯 C# 代码来定义模型。
  7. Database First

    • Database First 是一种开发模式,开发者首先创建数据库和表,然后 EF 根据数据库生成实体类和 DbContext。
  8. Migrations

    • Migrations 是 EF 的一个特性,它允许开发者跟踪模型的变更,并应用这些变更到数据库。
    • 它通过迁移脚本来管理数据库的版本。
  9. Connection String

    • Connection String 是一个字符串,包含了连接数据库所需的所有信息,如数据库服务器地址、数据库名、认证信息等。
  10. Repository Pattern

    • Repository Pattern 是一种设计模式,它定义了访问数据的方法,而不需要暴露数据访问的实现细节。
    • 在使用 EF 时,Repository Pattern 可以帮助开发者更好地组织代码,提高代码的可维护性和可测试性。
  11. LINQ to Entities

    • LINQ to Entities 是 EF 提供的一种查询语言,它允许开发者使用 LINQ 语法来查询数据库。
  12. Change Tracking

    • EF 通过 DbContext 跟踪实体的状态,包括新增、修改和删除。
    • 这使得开发者可以轻松地保存更改到数据库。
  13. Lazy LoadingEager Loading

    • Lazy Loading 是一种延迟加载策略,只有在需要时才加载相关数据。
    • Eager Loading 是一种预加载策略,它会在加载实体时同时加载相关数据。

常用的

  • DbContext:这是EF的上下文,它封装了对数据库的操作,如查询、插入、更新和删除。
  • DbSet:这是DbContext中的一个属性,代表数据库中的一个表。
  • Entity:代表数据库中的一行数据,是一个对象。
  • EntitySet:代表一组具有相同类型的实体对象。
  • LINQ to Entities:这是一种查询语言,允许开发者使用LINQ语法来查询数据库。
  • Entity SQL:这是另一种查询语言,类似于LINQ to Entities,但更复杂。
  • Object Services:负责数据的具体化,即将客户端实体数据转换为数据库记录,以及反之。
  • Entity Client Data Provider:将LINQ to Entities或Entity SQL转换为数据库可以识别的SQL查询语句。
  • ADO.NET Data Provider:使用标准的ADO.NET与数据库通信。

EF的架构包括实体数据模型(EDM),它由概念模型、存储模型和映射模型组成。概念模型定义了模型类和它们之间的关系,存储模型是数据库设计模型,包括表、视图、存储过程等,映射模型包含有关如何将概念模型映射到存储模型的信息。

在使用EF时,开发者可以通过配置文件(.config)中的连接字符串来配置数据库连接,并且可以通过T4模板生成context类和实体类。Entity类通常是POCO(Plain Old CLR Object)类,它们是简单的.NET对象,不依赖于任何特定的框架。

EF还支持多种实体类型,包括POCO实体和动态代理(POCO Proxy),后者允许延迟加载和自动跟踪更改。

EF的生命周期管理包括跟踪实体的状态,如新增、已删除、已修改、未更改和分离。这些状态帮助EF确定何时需要对数据库执行插入、更新或删除操作。

EF Core是Entity Framework的跨平台、轻量级版本,它支持多种数据库引擎,并且具有良好的可扩展性和性能优化功能。EF Core通过约定大于配置的原则,提供了一种简化的模型配置方式,同时也支持Fluent API和数据注解来自定义模型配置。

EF Core支持数据库迁移,这是一种根据实体类的变化自动更新数据库结构的过程。开发者可以使用EF Core的CLI命令来生成迁移脚本并更新数据库。

总的来说,Entity Framework和EF Core为.NET开发者提供了强大的工具来简化数据库操作,使他们能够更专注于业务逻辑而不是数据库细节。

ORM(Object-Relational Mapping)

ORM概念

ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,用于在关系数据库和对象程序语言之间转换数据。ORM 允许开发者使用面向对象的方式来操作数据库,而不必编写复杂的 SQL 语句。这样做的好处是提高了代码的可读性和可维护性,同时也减少了数据库访问代码的冗余。

C#中流行的ORM框架:

  1. Entity Framework (EF)

    • Entity Framework 是由微软开发的 ORM 框架,支持 .NET 应用程序。它提供了 Code First、Database First 和 Model First 开发模式。
    • EF 通过 DbContext 和 DbSet 提供了对数据库的操作接口,支持 LINQ 查询,使得数据访问更加直观和方便。
  2. NHibernate

    • NHibernate 是一个成熟的、功能丰富的 ORM 框架,它基于 Java 的 Hibernate 框架。NHibernate 支持复杂的映射策略和缓存机制,适用于需要高度可定制化数据访问层的企业级应用。
  3. Dapper

    • Dapper 是一个轻量级的 ORM 工具,它是一个小巧的数据库映射框架,用于.NET平台。Dapper 通过扩展 IDbConnection 对象,提供了高效的 SQL 执行和映射能力。
    • 它特别适合需要高性能和细粒度控制的场景。
  4. Entity Framework Core

    • Entity Framework Core 是 Entity Framework 的跨平台版本,支持 .NET Core 和 .NET 5/6/7 等。它是一个轻量级的、可扩展的框架,适用于构建现代的云原生和移动应用。
  5. LLBLGen Pro

    • LLBLGen Pro 是一个全功能的 ORM 框架,提供了强大的数据访问和数据建模功能。它支持复杂的查询、事务管理、缓存和数据验证。

ORM的主要功能:

  • 对象映射:将数据库表映射为类,表的行映射为对象实例。
  • 数据查询:使用对象和集合的方式查询数据库,而不是编写 SQL 语句。
  • 数据持久化:将对象的状态保存到数据库中,包括插入、更新和删除操作。
  • 延迟加载:按需加载关联对象的数据,以优化性能。
  • 事务管理:简化数据库事务的处理。

使用ORM的好处:

  • 提高生产力:开发者可以专注于业务逻辑,而不是数据库操作细节。
  • 减少错误:减少手动编写 SQL 带来的错误。
  • 代码可维护性:使用面向对象的方式组织代码,提高代码的可读性和可维护性。
  • 数据库无关性:代码通常不依赖于特定的数据库系统,提高了代码的可移植性。

ORM 的一些关键概念:

  1. 实体(Entity)

    • 实体是现实世界中的对象在计算机程序中的表示,通常对应数据库中的一行记录。
  2. 属性(Attribute)

    • 实体的属性对应数据库表中的列,存储了实体的具体数据。
  3. 关系(Relationship)

    • 对象之间的关系,如父子关系、关联关系等,在数据库中通常通过外键来实现。
  4. 导航属性(Navigation Property)

    • 导航属性允许开发者在对象之间导航,而不需要直接操作数据库。
  5. 数据映射(Mapping)

    • 数据映射是指定义对象模型和数据库模型之间的对应关系,包括实体如何映射到表,属性如何映射到列,以及关系如何映射到外键。
  6. 数据持久化(Persistence)

    • 数据持久化是指将内存中的对象状态保存到数据库中,以便持久存储。
  7. 延迟加载(Lazy Loading)

    • 延迟加载是一种策略,只有在需要时才从数据库加载相关对象的数据。
  8. 立即加载(Eager Loading)

    • 与延迟加载相反,立即加载是在查询时就加载所有相关对象的数据。
  9. 级联操作(Cascading)

    • 级联操作是指在对一个对象进行操作(如插入、更新、删除)时,相关联的对象也会自动进行相应的操作。
  10. 存储过程(Stored Procedure)

    • 存储过程是一组为了完成特定功能的 SQL 语句集,它存储在数据库中,可以通过 ORM 调用。
  11. 事务(Transaction)

    • 事务是一组原子性的数据库操作,要么全部成功,要么全部失败。
  12. 配置(Configuration)

    • ORM 框架通常允许通过配置文件或代码来配置实体和数据库的映射关系。
  13. 迁移(Migrations)

    • 迁移是 ORM 框架中用于跟踪和应用数据库模式变更的过程。
  14. 模型(Model)

    • 在 ORM 中,模型是指应用程序中的对象模型,它定义了应用程序的数据结构。

ORM 框架的例子包括 Entity Framework (EF)、Hibernate、Django ORM、Sequelize 等。这些框架提供了不同的功能和特性,以适应不同的开发需求和场景。使用 ORM 可以提高开发效率,减少错误,并且使代码更加易于维护和理解。

相关推荐
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
坐井观老天6 小时前
在C#中使用资源保存图像和文本和其他数据并在运行时加载
开发语言·c#
pchmi8 小时前
C# OpenCV机器视觉:模板匹配
opencv·c#·机器视觉
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭10 小时前
C#都可以找哪些工作?
开发语言·c#
boligongzhu11 小时前
Dalsa线阵CCD相机使用开发手册
c#
向宇it1 天前
【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
java·开发语言·unity·c#·游戏引擎·里氏替换原则
sukalot1 天前
windows C#-命名实参和可选实参(下)
windows·c#
小码编匠1 天前
.NET 下 RabbitMQ 队列、死信队列、延时队列及小应用
后端·c#·.net
我不是程序猿儿1 天前
【C#】Debug和Release的区别和使用
开发语言·c#