惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
IT之家
IT之家
T
The Blog of Author Tim Ferriss
V
V2EX
博客园 - 聂微东
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
U
Unit 42
Vercel News
Vercel News
L
LangChain Blog
博客园 - 司徒正美
H
Help Net Security
Recent Announcements
Recent Announcements
Recorded Future
Recorded Future
V
Visual Studio Blog
Jina AI
Jina AI
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
Y
Y Combinator Blog
C
Check Point Blog
博客园 - 三生石上(FineUI控件)
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
The Register - Security
The Register - Security
The GitHub Blog
The GitHub Blog
B
Blog RSS Feed
F
Fortinet All Blogs
B
Blog
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
云风的 BLOG
云风的 BLOG
爱范儿
爱范儿
MongoDB | Blog
MongoDB | Blog
F
Full Disclosure
有赞技术团队
有赞技术团队
罗磊的独立博客
博客园_首页
MyScale Blog
MyScale Blog
aimingoo的专栏
aimingoo的专栏
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
Engineering at Meta
Engineering at Meta
量子位
I
InfoQ
小众软件
小众软件
P
Proofpoint News Feed

博客园 - weipt

终于!我造了个「AI代驾」级别的AutoBuilder,一键干掉80%的重复CRUD工作 OpenClaw 配置飞书机器人完整指南:从零到每天定时推送天气 国产数据库私有化部署实战:PolarDB for PostgreSQL 免费容器版踩坑记 发票打印还在花钱?这款免费小工具,A4纸一半大小、自动排版,真香! 🔥 自己写的FBX转3D Tiles工具,免费!还能当模型浏览器用 相同代码在360浏览器能显示,在edge提示webgl不支持,edge下都最新的内核。 什么是技术架构、数据架构、业务架构、应用架构和代码架构? 使用pyinstaller打包的exe文件太大,怎么办 2026无人机新规正式施行!各位飞手赶紧收藏 谈谈EF的两种模式 Next.js和blazor server比较开发网站哪个好 Blazor Server和 Blazor WebAssembly区别 关于vue项目中cesium的地图显示问题 关于顺丰退出抖音电商退货业务事件的分析 在WINDOWS上创建NTP授时服务器,并验证是否可用 这样的算作“全栈技术”吗? 大疆上云APIdemo打包配置 用nssm将minio和srs注册成服务 LoRa定位技术和蓝牙AoA定位技术的关系 Mysql查询工具,你还用navcat吗? jar注册为服务的方式 nginx怎么样配置rtmp推流服务器 时间戳和时间格式互转
谈谈EF Core 微软官方的 ORM(对象关系映射)框架
weipt · 2026-01-15 · via 博客园 - weipt

Microsoft.EntityFrameworkCore(简称 EF Core)是微软官方的 ORM(对象关系映射)框架,以下是其核心用法、优点和缺点:

一、基本用法

1. DbContext 定义

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

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlServer("ConnectionString");
    }
}

2. 实体配置

3. 基本 CRUD 操作

4. 迁移管理

二、高级特性

1. LINQ 查询

var result = await context.Orders
    .Include(o => o.User)          

2. 事务管理

using var transaction = await context.Database.BeginTransactionAsync();
try
{
    

3. 性能优化

三、主要优点

1. 开发效率高

  • 自动生成 SQL,减少手写 SQL 工作量

  • 强类型 LINQ 查询,编译时检查

  • Code First 模式支持快速迭代

2. 平台支持广泛

  • 支持 SQL Server、PostgreSQL、MySQL、SQLite 等

  • 跨平台(.NET Core/.NET 5+)

3. 功能丰富

  • 迁移管理(Migration)

  • 变更跟踪(Change Tracking)

  • 延迟加载(Lazy Loading)

  • 并发控制(Concurrency Control)

4. 集成良好

  • 与 ASP.NET Core 深度集成

  • 依赖注入支持

  • 配合 LINQ 提供强大查询能力

四、主要缺点

1. 性能问题

  • 复杂查询可能生成低效 SQL

  • 大量数据操作时性能不如 Dapper

  • N+1 查询问题需要手动优化

2. 学习曲线

  • 配置选项繁多

  • 性能调优需要深入理解

  • 迁移管理有一定复杂度

3. 灵活性受限

  • 复杂 SQL 难以表达

  • 某些数据库特性支持有限

  • 存储过程支持不如原生 ADO.NET

4. 调试困难

  • 生成的 SQL 不易调试

  • 性能问题定位复杂

  • 某些错误信息不够直观

五、使用建议

适合使用 EF Core 的场景:

  1. 业务逻辑复杂的应用

  2. 需要快速开发的项目

  3. 数据库结构频繁变更

  4. 团队熟悉 .NET 和 LINQ

不适合使用的场景:

  1. 对性能要求极高的系统

  2. 需要复杂 SQL 或数据库特性的项目

  3. 简单的 CRUD 应用(可考虑 Dapper)

  4. 已有成熟 SQL 代码需要复用

最佳实践:

  1. 对查询使用 AsNoTracking() 减少内存开销

  2. 合理使用 Include() 避免 N+1 问题

  3. 复杂查询考虑使用原始 SQL

  4. 定期分析生成的 SQL 语句

六、与 Dapper 对比

推荐选择:对于大多数企业应用,EF Core 是很好的选择。对于性能关键模块,可混合使用 EF Core + Dapper。

posted @ 2026-01-15 09:38  weipt  阅读(30)  评论()    收藏  举报