Entity Framework Core 支持通过不同的数据库提供程序访问许多不同的数据库,随着 .NET Core 的发展和开源社区的增长,提供程序也越来越多,基本满足所有数据库需求。
当前支持的提供程序
NuGet 程序包 | 支持的数据库引擎 | 维护商/供应商 | 备注/要求 | 有用的链接 |
Microsoft.EntityFrameworkCore.SqlServer | SQL Server 2008 及以上版本 | EF Core 项目 (Microsoft) |
| docs |
Microsoft.EntityFrameworkCore.Sqlite | SQLite 3.7 及以上版本 | EF Core 项目 (Microsoft) |
| docs |
Microsoft.EntityFrameworkCore.InMemory | EF Core 内存中数据库 | EF Core 项目 (Microsoft) | 仅用于测试 | docs |
Microsoft.EntityFrameworkCore.Cosmos | Azure Cosmos DB SQL API | EF Core 项目 (Microsoft) | 仅预览版 | 博客 |
Npgsql.EntityFrameworkCore.PostgreSQL | postgresql | Npgsql 开发团队 |
| docs |
Pomelo.EntityFrameworkCore.MySql | MySQL、MariaDB | Pomelo Foundation 项目 |
| 自述文件 |
Pomelo.EntityFrameworkCore.MyCat | MyCAT 服务器 | Pomelo Foundation 项目 | 仅预发行版 | 自述文件 |
EntityFrameworkCore.SqlServerCompact40 | SQL Server Compact 4.0 | Erik Ejlskov Jensen | .NET Framework | wiki |
EntityFrameworkCore.SqlServerCompact35 | SQL Server Compact 3.5 | Erik Ejlskov Jensen | .NET Framework | wiki |
FirebirdSql.EntityFrameworkCore.Firebird | Firebird 2.5 和 3.x | Jiří Činčura |
| docs |
EntityFrameworkCore.FirebirdSql | Firebird 2.5 和 3.x | Rafael Almeida |
| wiki |
MySql.Data.EntityFrameworkCore | MySQL | MySQL 项目 (Oracle) |
| docs |
Oracle.EntityFrameworkCore | Oracle DB 11.2 及更高版本 | Oracle | 预发行 | 网站 |
IBM.EntityFrameworkCore | Db2、Informix | IBM | Windows 版本 | 博客 |
IBM.EntityFrameworkCore-lnx | Db2、Informix | IBM | Linux 版本 | 博客 |
IBM.EntityFrameworkCore-osx | Db2、Informix | IBM | macOS 版本 | 博客 |
EntityFrameworkCore.Jet | Microsoft Access 文件 | Bubi | .NET Framework | 自述文件 |
EntityFrameworkCore.OpenEdge | Progress OpenEdge | Alex Wiese |
| 自述文件 |
Devart.Data.Oracle.EFCore | Oracle DB 9.2.0.4 及更高版本 | DevArt | 已付 | docs |
Devart.Data.PostgreSql.EFCore | PostgreSQL 8.0 及以上版本 | DevArt | 已付 | docs |
Devart.Data.SQLite.EFCore | SQLite 3 及以上版本 | DevArt | 已付 | docs |
Devart.Data.MySql.EFCore | MySQL 5 及以上版本 | DevArt | 已付 | docs |
未来的提供程序
Cosmos DB
我们一直在为 Cosmos DB 开发 EF Core 提供程序, 这是我们首次推出的基于 NOSQL 的文档的数据库提供程序,通过此次尝试,将为今后发布的EF Core 以及其他非关系提供程序的设计提供可能,这个包可以从 NuGet 库获取预览版。
Oracle 官方提供程序
Oracle 官方团队已发布适用于EF Core 的 Oracle 提供程序的Beta 版, 可通过 NuGet 获取预览版。
向应用程序添加数据库提供程序
EF Core 的大多数数据库提供程序都是作为NuGet 包分发的,可通过控制台或PMC进行安装。
dotnet add package provider_package_name install-package provider_package_name
安装后,需采用 OnConfiguring 方法或AddDbContext 方法(如果使用的是依赖关系注入容器)在DbContext 中配置提供程序。
optionsBuilder.UseSqlServer("connectionString");
很多提供程序针对模型的配置都是通用的,但特定的提供程序提供特定的配置选项。
SQL Server 提供程序支持使用内存优化表功能
SQL Server 内存优化表支持将整个表驻留在内存中,表数据有两个副本,第一个副本在内存中,第二个副本在硬盘上,两者保持同步,防止意外故障后导致的数据丢失,访问数据时,优先使用内存版本,所以性能较高。
modelBuilder.Entity<Blog>().ForSqlServerIsMemoryOptimized();
SQLite 数据库提供程序
此数据库提供程序允许将 Entity Framework Core 与 SQLite 一起使用,该提供程序作为 Entity Framework Core 项目的组成部分进行维护。
In-Memory 数据库提供程序
此数据库提供程序允许将Entity Framework Core 和内存数据库一起使用。 这对测试非常有用,尽管内存中模式下的SQLite 提供程序可能是针对关系数据库的更合适的测试替代,该提供程序作为Entity Framework Core 项目的组成部分进行维护。
编写自己的数据库提供程序
So you want to write an EF Core provider
我们建议使用以下命名规则,这也是微软 EF Core 团队所使用的规则。
<Optional project/company name>.EntityFrameworkCore.<Database engine name>
Microsoft.EntityFrameworkCore.SqlServer Npgsql.EntityFrameworkCore.PostgreSQL EntityFrameworkCore.SqlServerCompact40