You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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功能,步骤如下:

    1. 确保连接字符串包含Column Encryption Setting=enabled;
    2. 在配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:19:55