【发布时间】:2020-10-09 12:42:37
【问题描述】:
var countryCode = new SqlParameter("@countryCode", SqlDbType.VarBinary);
var byteArray = Encoding.UTF8.GetBytes(dto.Country);
countryCode.Value = byteArray;
var country = new SqlParameter("@country", "country");
country.Value = "country";
var rawUsers = DbContext.Users.FromSqlRaw("Select u.* from AspNetUsers u join AspNetUserClaims uc on
u.Id = uc.UserId where uc.ClaimType = @country and
uc.ClaimValue = @countryCode", country, countryCode)
.ToList();
错误:
[17:16:22 ERR] 错误:使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_WITH_AKV', column_encryption_key_database_name = 'MyDatabase') 和 varbinary( 2) 使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_WITH_AKV', column_encryption_key_database_name = 'MyDatabase') 加密在等于运算符中不兼容。
顺便说一句,db 列是加密的,大多数 nvarchar 列都是加密的。
我一直在寻找解决方案以使其正确。但似乎没有任何作用。我错过了什么吗?谁能帮忙?
【问题讨论】:
-
错误在这里告诉你问题。您无法使用等于 (
=) 运算符将加密的nvarchar(MAX)与加密的varbinary(2)进行比较。 -
@Larnu 是的,我明白这一点。但仅仅理解它并不能解决它。明白我的意思吗?我一直在寻找使其兼容的方法。也尝试过转换,但没有人工作。这就是我问的原因。
标签: sql-server entity-framework encryption sqldatatypes deterministic