.NET Core 2.2使用SQL Always Encrypted提示column encryption setting不支持
问题解答
支持性说明
.NET Core 2.2 原生自带的System.Data.SqlClient驱动不支持SQL Always Encrypted功能,该特性需要依赖Microsoft.Data.SqlClient驱动实现。
报错原因
从错误堆栈可判断,SeedData阶段执行时调用的仍然是System.Data.SqlClient命名空间下的类,你之前安装Microsoft.Data.SqlClient的修复仅覆盖了迁移场景,没有全局替换EF Core 2.2默认绑定的旧驱动。
解决方案
- 安装和.NET Core 2.2兼容的
Microsoft.Data.SqlClient版本,推荐使用1.1.4版本,更高版本不再支持.NET Core 2.2运行时。 - 修改
Startup.cs中ConfigureServices方法里的DbContext注册逻辑,强制EF Core使用新驱动:不要直接传入连接字符串,改为传入已经构造好的Microsoft.Data.SqlClient.SqlConnection实例,示例代码如下:
services.AddDbContext<SenSightsContext>(options => options.UseSqlServer( new Microsoft.Data.SqlClient.SqlConnection(Configuration.GetConnectionString("DefaultConnection")), sqlOptions => sqlOptions.MigrationsAssembly(typeof(SenSightsContext).Assembly.FullName) ) );
- 检查所有数据库相关配置,确保没有其他业务代码直接使用
System.Data.SqlClient构造数据库连接,同时确认连接字符串中Column Encryption Setting=Enabled参数拼写正确。
内容的提问来源于stack exchange,提问作者Ammar Ahmed
相关产品推荐
相关产品推荐

