我遇到问题,总是加密以与Entity Framework一起玩。
我的目标是.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上使用includes,事情开始变坏。
这有效
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配置文件可以看到第2个电话在exec sp_describe_parameter_encryption
的呼叫失败。
这种情况是否支持EF并且始终加密?
答案 0 :(得分:0)
您上一次查询不起作用的原因是,始终加密功能不支持复杂查询。 联合是使用EF包含语法(用于一对多关系)时出现的不受支持的语法之一。
您可能需要将查询重新整理为2个查询,以避免使用并集。 [对不起语法错误]