C# ORM

2024年8月29日 | 阅读 7 分钟

引言

面向对象编程方法或技术,称为对象关系映射(ORM),可以更轻松地将关系数据库与面向对象编程语言结合起来。使用面向对象的方法,开发人员可以由于 ORM 方法论而与数据库进行交互。ORM 被用于许多编程语言,包括 C#。

本文将重点介绍 C# 中的 ORM。首先,我们将回顾 ORM 的基础知识、其优缺点以及它在 C# 中的工作原理。然后,我们将讨论 C# 中一些流行的 ORM 工具,例如 Entity Framework、NHibernate 和 Dapper。

ORM 基础知识

ORM 是一种将面向对象模型映射到关系数据库模型的技术。它使程序员能够使用编程语言中的面向对象结构与数据库进行交互。换句话说,ORM 是一种将数据库用作面向对象数据源的方法。

使用 ORM,开发人员可以使用编程语言创建和操作数据库对象,而不是编写 SQL 查询。ORM 工具提供了一组 API,开发人员可以使用它们与数据库进行交互。这些 API 抽象了与数据库交互的复杂性,例如打开数据库连接、执行 SQL 语句和管理事务。

ORM 工具使用元数据将数据库表映射到编程语言中的对象。元数据包含有关数据库架构的信息,例如表名、列名、数据类型、主键和外键,以及表之间的关系。

ORM 的优点

与传统的数据库编程相比,ORM 具有几个优势

  • 生产力

ORM 通过减少与数据库交互所需的代码量来提高开发人员的生产力。开发人员可以使用面向对象的结构创建、读取、更新和删除数据库中的数据。

  • 可维护性

ORM 工具提供了一个抽象层,可以更轻松地维护应用程序。对象模型可以快速适应数据库模式的更改。

  • 性能

ORM 工具优化 SQL 查询和缓存以提高性能。

  • 可移植性

ORM 工具通过抽象数据库的底层细节来提供可移植性。开发人员可以在不更改应用程序代码的情况下切换到不同的数据库。

ORM 的缺点

ORM 也有一些缺点

  • 复杂度

ORM 工具可能很复杂,需要经过学习过程才能有效使用。

  • 性能

虽然 ORM 工具可以提高性能,但如果使用不当,它们也可能引起性能问题。

  • 局限性

ORM 工具可能不支持所有数据库功能,或者可能不够灵活,无法处理复杂查询。

  • 开销

ORM 工具在应用程序和数据库之间添加了一个开销层,这可能会影响性能。

ORM 在 C# 中的工作原理

C# 支持许多 ORM 技术,使程序员能够以面向对象的方式与数据库进行交互。在本节中,我们将以 Entity Framework 为例,了解 ORM 在 C# 中的基本工作原理。

Entity Framework 是一个 ORM 工具,它提供了一组 API,用于使用 C# 与数据库进行交互。它允许开发人员使用面向对象的结构(如类、对象和LINQ(语言集成查询))来处理数据库。

使用 Entity Framework 的第一步是创建数据模型。由表示数据库模式的一组类构成数据模型。Entity Framework 使用元数据将类映射到数据库表。

要创建数据模型,开发人员可以使用 Entity Framework 的可视化设计器或 Code First 方法。使用可视化设计器,开发人员可以将数据库表拖放到设计表面上以创建数据模型。开发人员可以使用 Code First 创建反映数据库模式的 C# 类,Entity Framework 会自动创建数据库模式。

创建数据模型后,开发人员可以使用 Entity Framework 的 API 与数据库进行交互。例如,开发人员可以使用 LINQ 查询从数据库中检索数据。

LINQ 是 C# 中的一项语言功能,允许开发人员使用熟悉的编程结构(如 if 语句、循环和 lambda 表达式)编写查询。Entity Framework 将LINQ 查询转换为SQL语句,使程序员能够以面向对象的方式与数据库进行交互。

以下是使用 LINQ 通过 Entity Framework 从数据库检索数据的示例

C# 代码

在此示例中,我们创建了 MyDbContext 类的一个新实例,该类是 DbContext 的子类,并使用 LINQ 查询从数据库中检索居住在纽约的客户。LINQ 查询由 Entity Framework 转换为SQL并 against 数据库执行。然后,我们循环遍历结果并显示客户的姓名和城市。

此外,Entity Framework 还提供了用于在数据库中添加、更新和删除数据的 API。例如,要向数据库添加新客户,我们可以创建 Customer 类的实例,将其添加到 Customers DbSet 字段,然后使用 SaveChanges() 函数将更改保存到数据库。

C# 代码

在此示例中,创建了 Customer 类,并设置了其属性。然后,在将客户添加到 Customers DbSet 属性后,我们调用 SaveChanges() 函数将更改持久化到数据库。

C# 中流行的 ORM 工具

C# 中有几种流行的 ORM 工具,每种工具都有其优点和缺点。在本节中,我们将讨论三种流行的 ORM 工具:Entity Framework、NHibernateDapper

实体框架

Entity Framework 是一个成熟且功能丰富的 ORM 工具,广泛用于.NET生态系统。它提供了一系列 API,用于在处理数据库时采用面向对象的方法。Entity Framework 支持创建数据模型的 Code First 和 Database First 方法。

Entity Framework 具有几个优点,例如

  • LINQ.NET 等其他 .NET 技术集成。
  • 自动生成SQL语句并优化查询。
  • 支持多种数据库提供程序,如SQL Server、OracleMySQL
  • 支持 migrations 以管理数据库模式更改。

Entity Framework 也有一些缺点,例如

由于其抽象层而产生的开销。

  • 不支持存储过程等复杂数据库功能。
  • 与其它数据库访问方法相比,性能较低。

NHibernate

NHibernate 是一个开源 ORM 工具,广泛用于 Java 生态系统,并有一个 .NET 移植。它提供了一系列 API,用于在处理数据库时采用面向对象的方法。NHibernate 支持创建数据模型的 Code First 和 Database First 方法。

NHibernate 具有几个优点,例如

  • 支持多种数据库提供程序,如SQL Server、OracleMySQL
  • 灵活的映射选项,包括对XML和 Fluent Mapping 的支持。
  • NHibernate 与 LINQ 以及其他 .NET 技术集成。
  • 支持存储过程等复杂的数据库功能。

NHibernate 也有一些缺点,例如

  • 由于其复杂性而导致陡峭的学习曲线。
  • 与低级数据库访问技术相比,性能较慢。
  • 与其它 ORM 工具相比,文档有限。

Dapper

Dapper 是一个轻量级 ORM 工具,提供了一组 API,用于以微型 ORM 的方式与数据库进行交互。Dapper 的设计简单快捷,并专注于性能而非抽象。Stack Overflow 和 Microsoft 等几家大型公司使用 Dapper,它已在 .NET 生态系统中广受欢迎。

Dapper 具有几个优点,例如

  • 与其他 ORM 工具相比,性能很高。
  • 易于学习和使用。
  • 支持多种数据库提供程序,如 SQL Server、Oracle 和 MySQL。
  • 支持存储过程和动态 SQL 查询。

Dapper 也有一些缺点,例如

  • 不支持复杂的映射场景。
  • 与其他 ORM 工具相比,文档相对较少。
  • 没有内置的 migrations 支持。

选择合适的 ORM 工具

选择合适的 ORM 工具取决于几个因素,例如项目的规模和复杂性、开发团队的经验水平以及应用程序的性能要求。以下是选择合适 ORM 工具的一些规则或指南

  • 对于数据模型简单的中小型项目,Dapper 因其简单和高性能而成为不错的选择。
  • 对于数据模型复杂且性能要求高的中大型项目,Entity FrameworkNHibernate 由于其灵活性和对高级功能的支持而可能成为更好的选择。
  • 对于需要与 LINQ 和 ASP.NET 等其他 .NET 技术集成的项目,Entity FrameworkNHibernate 由于与这些技术的紧密集成而可能成为更好的选择。
  • 对于需要支持多种数据库提供程序的项目,Entity FrameworkNHibernate 由于其对不同数据库的广泛支持而可能成为更好的选择。

结论

ORM 工具是当前软件开发的重要组成部分,它们使程序员能够以面向对象的方式与数据库进行交互。在 .NET 生态系统中,有几种流行的 ORM 工具,例如Entity Framework、NHibernateDapper,它们各有优缺点。选择合适的 ORM 工具取决于几个因素,例如项目的规模和复杂性、开发团队的经验水平以及应用程序的性能要求。无论选择哪种 ORM 工具,都必须正确使用它,以避免性能问题和其他陷阱。通过选择合适的 ORM 工具并正确使用,开发人员可以提高生产力,并创建健壮且可扩展的应用程序。


下一个主题C# 中的 SignalR