如何在Entity Framework Core中直接使用Always Encrypted,无需依赖Microsoft.Data.SqlClient?
EF Core 7 实现Always Encrypted功能的依赖说明
不能完全脱离Microsoft.Data.SqlClient库实现你需要的Always Encrypted功能,原因和具体实现方式如下:
EF Core SQL Server提供程序的底层依赖:
Microsoft.EntityFrameworkCore.SqlServer(EF Core针对SQL Server的官方提供程序)在EF Core 7版本中,本身就依赖Microsoft.Data.SqlClient作为底层ADO.NET驱动。也就是说,即使你全程使用EF Core的API操作数据库,底层依然会调用该驱动来完成与SQL Server的交互,无法彻底移除这个依赖库。EF Core已原生支持Always Encrypted:你不需要手动编写
Microsoft.Data.SqlClient的底层代码,仅需通过EF Core的配置就能实现Always Encrypted功能,步骤如下:- 确保连接字符串包含
Column Encryption Setting=enabled; - 在配置DbContext时,传入Azure Key Vault的认证凭据,让EF Core自动处理密钥的获取与解密逻辑。
- 确保连接字符串包含
示例配置代码:
在项目的依赖注入配置中(比如Program.cs),可以这样配置DbContext:builder.Services.AddDbContext<YourDbContext>(options => { var connectionString = builder.Configuration.GetConnectionString("YourDbConnection"); var tenantId = builder.Configuration["AzureAd:TenantId"]; var clientId = builder.Configuration["AzureAd:ClientId"]; var clientSecret = builder.Configuration["AzureAd:ClientSecret"]; // 创建Azure Key Vault认证凭据 var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); options.UseSqlServer(connectionString, sqlOpts => { sqlOpts.UseSqlClientOptions(clientOpts => { clientOpts.ColumnEncryptionSetting = SqlColumnEncryptionSetting.Enabled; clientOpts.SetAzureKeyVaultCredential(credential); }); }); });
总结:你可以仅通过EF Core的API完成所有操作,不需要直接使用Microsoft.Data.SqlClient的底层对象(如SqlConnection),但该库作为EF Core SQL Server提供程序的依赖,会被自动引入到项目中,无法完全移除。
内容的提问来源于stack exchange,提问作者Shahrukh Sayyed
相关产品推荐
相关产品推荐

