始终使用实体框架和包含加密无法实现查询



我在始终加密以与实体框架配合良好时遇到问题。

我的目标是 .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);

一旦我开始在我的数据库上下文中使用包含,事情就会开始变坏。

这行得通

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 是否支持此方案并始终加密?

上次查询不起作用的原因是始终加密功能不支持复杂查询。Union 是使用 EF 包含语法(对于一对多关系(时出现的不受支持的语法之一。

您可能需要将查询重新加工为 2 个查询,以避免使用联合。[对不起,任何语法错误]

相关内容

  • 没有找到相关文章

最新更新