1

使用新的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)之后,一切都很顺利。有什么建议么?

4

2 回答 2

0

对于SQL 2016的加密(确定性)列,使用EF6迁移 - 即使模型具有将其数据类型指定为 datetime 的属性,EF 仍将其推送为 datetime2(7) 并抛出此线程上报告的冲突错误, 即使手动更改迁移文件也无法解决此问题。

唯一的解决方案是在 SQL 数据库中使用数据类型datetime2(7) 而不是 datetime 。

    /// <summary>
    /// *this wont work*
    /// </summary>
    [Column("addedDate", TypeName = "datetime")]
    public DateTime? AddedDate { get; set; }
于 2017-08-15T04:25:05.277 回答
-1

原来这是一个实体框架问题。所以虽然我最初首先使用模型,.NET DateTime被转换为Sql datetime,但随后 EF 使用Sql datetime2进行绑定。

连线的事情是,在将列转换为Always Encrypted之前,我从未遇到过错误。为什么这从未发生过对我来说仍然是一个谜,但下面的 sql 已经解决了我的问题。我强烈建议在将 Always Encrypted 应用于列之前运行它,以避免进一步的错误:

ALTER TABLE [TestTable] ALTER COLUMN Dob datetime2
于 2016-05-03T12:46:07.530 回答