我遇到了始终加密以与实体框架配合使用的问题。
我的目标是 .Net 4.6.1,已Column Encryption Setting=Enabled
在我的连接字符串中启用,我可以成功拨打电话并使用
var results = dbContext.EncryptedTable.ToList()
EncryptedTable 有 1 列使用确定性加密,数据类型为 Varchar(Max)。
DbContext 有 CodeFirst 支持
Property(x => x.EncryptedColumn)
.HasColumnName("EncryptedColumn").IsRequired().IsUnicode(false);
一旦我开始在我的 dbContext 上使用包含,事情就会开始变坏。
这有效
var id = Guid.Parse("123-456-789");
var result = dbContext
.TableA
.Include(x => x.EncryptedTable)
.FirstOrDefault(x => x.id == id);
这会引发错误:
Operand type clash: varchar is incompatible with varchar(max) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256',
var id = Guid.Parse("123-456-789");
var result = dbContext.TableA
.Include(x => x.TableB)
.Include(x => x.EncryptedTable)
.FirstOrDefault(x => x.id == id);
对 2 个调用执行 SQL 配置文件可以看到第二个调用失败exec sp_describe_parameter_encryption
。
EF 是否支持此方案并始终加密?