001从零开始入门Entity Framework Core——基础知识
Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。
一、什么是 Entity Framework Core 模型?
1、对于 EF Core,使用模型执行数据访问。 模型由实体类和表示数据库会话的上下文对象构成。 上下文对象允许查询并保存数据。
2、EF 支持以下模型开发方法:
- 从现有数据库生成模型。
- 对模型手动编码,使其符合数据库。
- 创建模型后,使用 EF 迁移从模型创建数据库。 模型发生变化时,迁移可让数据库不断演进。
二、安装 Entity Framework Core
1、Entity Framework Core (EF Core) 以 NuGet 包的形式提供。 应用程序所需的包取决于:
- 所使用的数据库系统类型(SQL Server、SQLite 等)
- 所需的 EF Core 功能
2、安装包的常规过程是:
- 确定数据库提供程序并安装相应的包
- 如果使用关系数据库提供程序,还需安装 Microsoft.EntityFrameworkCore 和 Microsoft.EntityFrameworkCore.Relational。 这有助于确保使用一致的版本,同时也意味着 NuGet 会在新的包版本发布时通知你。
- 或者确定所需的工具类型,并为此安装相应的包
3、总言之,要将 EF Core 添加到应用程序,请安装适用于要使用的数据库提供程序的 NuGet 包。
4、注意事项:
- 如果要生成 ASP.NET Core 应用程序,不需要安装内存中和 SQL Server 提供程序。 这些提供程序随 EF Core 运行时一起包含在当前版本的 ASP.NET Core 中。
- 要安装或更新 NuGet 包,可以使用 .NET Core 命令行界面 (CLI)、Visual Studio 包管理器对话框或 Visual Studio 包管理器控制台。
- 用于 EF Core 的第三方提供程序通常不随 EF Core 运行发布修补程序版本。 若要将使用第三方提供程序的应用程序升级到 EF Core 的修补程序版本,可能需要添加对单独的 EF Core 运行时组件(如 Microsoft.EntityFrameworkCore 和 Microsoft.EntityFrameworkCore.Relational)的直接引用。
- 请务必安装 Microsoft 提供的所有 EF Core 包的同一版本。 例如,如果安装了 5.0.3 版本的 Microsoft.EntityFrameworkCore.SqlServer,则所有其他 Microsoft.EntityFrameworkCore.* 包也必须为 5.0.3 版本。
- 此外,请确保所有外部包都与所使用的 EF Core 的版本兼容。 特别是,检查外部数据库提供程序是否支持你所使用的 EF Core 版本。 EF Core 的新主版本通常需要更新的数据库提供程序。
三、数据库提供程序
1、EF Core 通过使用“数据库提供程序”支持不同的数据库系统。 每个系统都有自己的数据库提供程序,而提供程序以 NuGet 包的形式提供。 应用程序应安装其中一个或多个提供程序包。
2、下表列出了常见的数据库提供程序。
数据库系统 | 包 |
---|---|
SQL Server 和 SQL Azure | Microsoft.EntityFrameworkCore.SqlServer |
SQLite | Microsoft.EntityFrameworkCore.Sqlite |
Azure Cosmos DB | Microsoft.EntityFrameworkCore.Cosmos |
PostgreSQL | Npgsql.EntityFrameworkCore.PostgreSQL |
MySQL | Pomelo.EntityFrameworkCore.MySql |
EF Core 内存中数据库 | Microsoft.EntityFrameworkCore.InMemory |
四、扩展包
Microsoft 和第三方以 NuGet 包的形式发布了许多 EF Core 扩展。 常用包包括:
功能 | 包 | 附加依赖项 |
---|---|---|
用于延迟加载和更改跟踪的代理 | Microsoft.EntityFrameworkCore.Proxies | Castle.Core |
对 SQL Server 的空间支持 | Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite | NetTopologySuite 和 NetTopologySuite.IO.SqlServerBytes |
对 SQLite 的空间支持 | Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite | NetTopologySuite 和 NetTopologySuite.IO.SpatiaLite |
对 PostgreSQL 的空间支持 | Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite | NetTopologySuite 和 NetTopologySuite.IO.PostGIS(通过 Npgsql.NetTopologySuite) |
对 MySQL 的空间支持 | Pomelo.EntityFrameworkCore.MySql.NetTopologySuite | NetTopologySuite |
五、其他包
其他 EF Core 包作为数据库提供程序包的依赖项进行拉取。 但是,建议为这些包添加显式包引用,这样 NuGet 在发布新版本时会提供通知。
功能 | 包 |
---|---|
EF Core 基本功能 | Microsoft.EntityFrameworkCore |
通用关系数据库功能 | Microsoft.EntityFrameworkCore.Relational |
用于 EF Core 特性等的轻型包。 | Microsoft.EntityFrameworkCore.Abstractions |
EF Core 使用情况的 Roslyn 代码分析器 | Microsoft.EntityFrameworkCore.Analyzers |
没有原生 SQLite 依赖项的 EF Core SQLite 提供程序 | Microsoft.EntityFrameworkCore.Sqlite.Core |
六、EF Core 版本和计划
Release | 目标 Framework | 支持截止时间 |
---|---|---|
EF Core 6.0 | .NET 6 | 2024 年 11 月 8 日 (LTS) |
.NET Standard 2.1 | 2022 年 5 月 10 日过期 | |
EF Core 3.1 | .NET Standard 2.0 | 2022 年 12 月 3 日 (LTS) |
.NET Standard 2.1 | 2020 年 3 月 3 日过期 | |
.NET Standard 2.0 | 过期时间:2019 年 12 月 23 日 | |
.NET Standard 2.0 | 过期时间:2021 年 8 月 21 日* | |
.NET Standard 2.0 | 过期时间:2018 年 10 月 1 日 | |
.NET Standard 1.3 | 过期时间:2019 年 6 月 27 日 | |
.NET Standard 1.3 | 过期时间:2019 年 6 月 27 日 |
七、EF Core 支持的 .NET 实现
EF Core | 3.1 | 5.0 | 6.0 |
---|---|---|---|
.NET & .NET Core | 3.1 | 5.0 | 6.0 |
.NET Standard | 2.0 | 2.1 | |
.NET Framework | 4.7.2 | ||
Mono | 5.4 | 6.4 | |
Xamarin.iOS | 10.14 | 12.16 | (使用 .NET 6) |
Xamarin.Mac | 3.8 | 5.16 | (使用 .NET 6) |
Xamarin.Android | 8.0 | 10.0 | (使用 .NET 6) |
UWP | 10.0.16299 | (使用Windows 应用 SDK) | |
Unity | 2018 年 1 月 | 2021.2 | TBD |
Tizen | 4.0 | 6.0 | (使用 .NET 6) |
----------------------------------------------本篇文章到此结束-------------------------------------------