Microsoft SQL Server EF Core 数据库提供程序

此数据库提供程序允许将 Entity Framework Core 与 Microsoft SQL Server(包括 Azure SQL 和 Azure Synapse Analytics)一起使用。 该提供程序作为 Entity Framework Core 项目的组成部分进行维护。

Install

安装 Microsoft.EntityFrameworkCore.SqlServer NuGet 包

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

使用情况和配置

项目引用 nuget 包后,按如下所示配置 EF for SQL Server:

public class MyContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("<CONNECTION STRING>");
    }
}

将 EF 与依赖项注入(例如 ASP.NET)配合使用时,请使用以下内容:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MyContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("MyContext")));

EF SQL Server 提供程序使用 Microsoft.Data.SqlClient 作为其基础 ADO.NET 提供程序。 有关 SqlClient 接受的连接字符串的详细信息, 请参阅此页面

兼容性级别

可以选择使用数据库的兼容级别配置 EF;更高的兼容性级别允许使用较新的功能,并相应地配置 EF 使它使用这些功能。 如果未显式配置兼容级别,则会选择合理的默认值,该默认值可能无法利用最新的功能。 因此,建议明确配置需要的兼容性级别。

请注意,这仅涵盖 EF 自己的兼容性级别配置(影响它生成的 SQL)但不会影响实际数据库中配置的兼容级别。 在较新版本的 SQL Server 上托管的数据库仍可能配置兼容性级别较低,从而导致它们不支持最新功能,因此可能需要更改数据库中的兼容性级别。 有关兼容性级别的详细信息, 请参阅文档

要配置 EF 的兼容性级别,请按如下方式使用 UseCompatibilityLevel()

optionsBuilder.UseSqlServer("<CONNECTION STRING>", o => o.UseCompatibilityLevel(170));

连接弹性

EF 包括自动重试失败的数据库命令的功能;有关详细信息, 请参阅文档。 使用 UseAzureSqlUseAzureSynapse时,会自动使用特定于这些数据库的相应设置设置来设置连接复原能力。 否则,在使用 UseSqlServer 时,请按照连接复原文档中的说明,用 EnableRetryOnFailure 配置提供程序。

在某些情况下, UseSqlServer 可以在无法控制的代码中调用。 从 EF 9 开始,若要在这类场景中启用连接复原,请事先调用ConfigureSqlEngine(c => c.EnableRetryOnFailureByDefault())(在使用UseAzureSqlUseAzureSynapse时,这不是必须的)。

备注和注意事项

  • Microsoft.Data.SqlClient 包的交付频率高于 EF Core 提供程序。 若要利用新功能和 bug 修复,可以向最新版本的 Microsoft.Data.SqlClient 添加直接包引用。
  • EF SQL Server 提供程序使用 Microsoft.Data.SqlClient,而不是较旧的 System.Data.Client;如果项目直接依赖于 SqlClient,请确保它引用 Microsoft.Data.SqlClient 包。 有关 Microsoft.Data.SqlClient 和 System.Data.SqlClient 之间的差异的详细信息, 请参阅此博客文章

支持的数据库引擎

  • Microsoft SQL Server (2019 及更高版本)
  • Azure SQL 数据库
  • Azure Synapse Analytics