C# (.NET) 的 ORM:Entity Framework、Dapper 和 LINQ to SQL 对比

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# (.NET) 的 ORM:对比与示例



在 .NET 平台的现代开发中,与数据库的交互很少能离开对象关系映射(ORM)。ORM 库允许开发者通过面向对象的代码与关系型数据库进行交互,无需手动编写复杂的 SQL 查询。本文将对比三种最流行的 C# ORM:Entity Framework Core、Dapper 和 LINQ to SQL,并提供实际使用示例。



1. Entity Framework Core (EF Core)



EF Core 是微软推出的现代化、跨平台 ORM,是 Entity Framework 6 的演进版本。它支持多种数据库系统(SQL Server、PostgreSQL、SQLite、MySQL 等),并提供强大的数据处理能力。



主要特点:

  • Code First / Database First — 可以根据代码创建数据库,反之亦然。
  • LINQ 查询 — 使用 C# 编写查询,EF Core 将其转换为 SQL。
  • 迁移 — 自动管理数据库架构。
  • 延迟加载 (Lazy Loading) — 自动加载关联数据。


代码示例 (Code First):



using Microsoft.EntityFrameworkCore;using System.Collections.Generic;

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

public class AppDbContext : DbContext{ public DbSet<User> Users { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=.;Database=MyDb;Trusted_Connection=True;"); }}

// 使用using (var db = new AppDbContext()){ // 添加用户 var user = new User { Name = "伊万", Email = "ivan@example.com" }; db.Users.Add(user); db.SaveChanges();

// 通过 LINQ 查询 var users = db.Users.Where(u => u.Name.Contains("伊万")).ToList();}


优点: 高性能、功能丰富、支持迁移、社区活跃。缺点: 内存占用较大、复杂查询配置困难。



2. Dapper



Dapper 是由 Stack Overflow 团队创建的轻量级微 ORM。它不提供完整的映射功能,但允许直接执行 SQL 查询,并将结果自动映射到 C# 对象。



主要特点:

  • 极致性能 — Dapper 被认为是 .NET 中最快的 ORM 之一。
  • 原生 SQL — 您直接编写纯 SQL 查询。
  • 极简主义 — 没有迁移、上下文和复杂配置。


代码示例:



using Dapper;using System.Data.SqlClient;using System.Linq;

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

// 使用string connectionString = "Server=.;Database=MyDb;Trusted_Connection=True;";using (var connection = new SqlConnection(connectionString)){ // 执行 SQL 查询 var users = connection.Query<User>("SELECT * FROM Users WHERE Name = @Name", new { Name = "伊万" }).ToList();

// 执行存储过程 var result = connection.Query<User>("GetUsers", commandType: System.Data.CommandType.StoredProcedure);}


优点: 速度快、简单、资源消耗低。缺点: 缺少迁移功能、需要手动编写 SQL、不支持自动加载关联实体。



3. LINQ to SQL



推荐