将数据插入 Always Encrypted 列时出错
Error inserting data into AlwaysEncrypted column
使用新的 AlwaysEncrypted 功能,我在我的一个表中加密了 DateTime 列,这是我遇到的错误尝试插入新日期时:
Message: [SqlException: Operand type clash: datetime2(7) encrypted with (encryption_type = 'RANDOMIZED', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'TestDb') is incompatible with datetime encrypted with (encryption_type = 'RANDOMIZED', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'TestDb') Statement(s) could not be prepared.]
我也遇到了字符串插入错误,但是在将数据类型从 varchar(24) (例如) 更改为 nvarchar(max ) 一切顺利。有什么建议吗?
原来是 Entity Framework 问题。所以虽然我最初首先使用模型,但 .NET DateTime 被转换为 Sql datetime,但随后 EF 使用 Sql datetime2 用于绑定。
有线的事情是,在将列转换为 Always Encrypted 之前,我从未遇到过错误。为什么以前从未发生过这种情况对我来说仍然是个谜,但下面的 sql 解决了我的问题。我强烈建议 运行 在对列应用 Always Encrypted 之前这样做,以避免进一步的错误:
ALTER TABLE [TestTable] ALTER COLUMN Dob datetime2
对于 SQL 2016 的 encrypted(确定性)列,EF6 迁移——即使模型具有将其数据类型指定为 datetime 的属性,EF 仍然仅将其推送为 datetime2(7) 并抛出在此线程上报告的冲突错误,即使手动更改迁移文件也无法解决此问题.
唯一的解决方案是在SQL数据库中使用数据类型datetime2(7)而不是datetime。
/// <summary>
/// *this wont work*
/// </summary>
[Column("addedDate", TypeName = "datetime")]
public DateTime? AddedDate { get; set; }
使用新的 AlwaysEncrypted 功能,我在我的一个表中加密了 DateTime 列,这是我遇到的错误尝试插入新日期时:
Message: [SqlException: Operand type clash: datetime2(7) encrypted with (encryption_type = 'RANDOMIZED', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'TestDb') is incompatible with datetime encrypted with (encryption_type = 'RANDOMIZED', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'TestDb') Statement(s) could not be prepared.]
我也遇到了字符串插入错误,但是在将数据类型从 varchar(24) (例如) 更改为 nvarchar(max ) 一切顺利。有什么建议吗?
原来是 Entity Framework 问题。所以虽然我最初首先使用模型,但 .NET DateTime 被转换为 Sql datetime,但随后 EF 使用 Sql datetime2 用于绑定。
有线的事情是,在将列转换为 Always Encrypted 之前,我从未遇到过错误。为什么以前从未发生过这种情况对我来说仍然是个谜,但下面的 sql 解决了我的问题。我强烈建议 运行 在对列应用 Always Encrypted 之前这样做,以避免进一步的错误:
ALTER TABLE [TestTable] ALTER COLUMN Dob datetime2
对于 SQL 2016 的 encrypted(确定性)列,EF6 迁移——即使模型具有将其数据类型指定为 datetime 的属性,EF 仍然仅将其推送为 datetime2(7) 并抛出在此线程上报告的冲突错误,即使手动更改迁移文件也无法解决此问题.
唯一的解决方案是在SQL数据库中使用数据类型datetime2(7)而不是datetime。
/// <summary>
/// *this wont work*
/// </summary>
[Column("addedDate", TypeName = "datetime")]
public DateTime? AddedDate { get; set; }