gpt4 book ai didi

c# - 始终使用 Entity Framework 加密,并且包含无法实现查询

转载 作者:行者123 更新时间:2023-12-02 00:32:36 26 4
gpt4 key购买 nike

我在始终加密以与 Entity Framework 良好配合时遇到问题。

我的目标是.Net 4.6.1,已在连接字符串中启用列加密设置=已启用,我可以使用

成功调用电话并接收解密内容
var results = dbContext.EncryptedTable.ToList()

EncryptedTable 有 1 列使用确定性加密,数据类型为 Varchar(Max)。

DbContext 有 CodeFirst 支持

Property(x => x.EncryptedColumn)
.HasColumnName("EncryptedColumn").IsRequired().IsUnicode(false);

一旦我开始在 dbContext 上使用 include ,事情就开始变糟。

这有效

var id = Guid.Parse("123-456-789");
var result = dbContext
.TableA
.Include(x => x.EncryptedTable)
.FirstOrDefault(x => x.id == id);

这会引发错误:操作数类型冲突:varchar 与使用 (encryption_type = 'DETERMINISTIC', Encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256',

加密的 varchar(max) 不兼容
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 include 语法(对于一对多关系)时出现的不受支持的语法之一。

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

关于c# - 始终使用 Entity Framework 加密,并且包含无法实现查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44130627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com