C# 使用LinqToSQL-Always Encrypt更新/插入带有加密列的SQL表中的行

C# 使用LinqToSQL-Always Encrypt更新/插入带有加密列的SQL表中的行,c#,sql-server,linq-to-sql,sql-server-2016,always-encrypted,C#,Sql Server,Linq To Sql,Sql Server 2016,Always Encrypted,我正在尝试实践SQL Server 2016的“始终加密”功能。我正在使用现有的应用程序和数据库来完成这项工作 我有一个表[User],其中我用“Deterministic”类型加密了“Password”列。我已经更改了连接字符串,并且能够检索所有行。我已为此表创建了存储库 我正在尝试使用InsertOnSubmit()和SubmitChanges()使用LinqToSQL插入和更新此表中的行 但每当我尝试插入新行或更新现有行时,都会出现错误: Msg 206,级别16,状态2,第7行操作数类型

我正在尝试实践SQL Server 2016的“始终加密”功能。我正在使用现有的应用程序和数据库来完成这项工作

我有一个表[User],其中我用“Deterministic”类型加密了“Password”列。我已经更改了连接字符串,并且能够检索所有行。我已为此表创建了存储库

我正在尝试使用InsertOnSubmit()和SubmitChanges()使用LinqToSQL插入和更新此表中的行

但每当我尝试插入新行或更新现有行时,都会出现错误:

Msg 206,级别16,状态2,第7行操作数类型冲突:varchar为 与使用(加密类型)加密的varchar(20)不兼容= “确定性”,加密算法名称= “AEAD_AES_256_CBC_HMAC_SHA_256”,列\u加密\u密钥\u名称= “CEK_Auto1”,列\u加密\u密钥\u数据库\u名称='BRO_UAT') 排序规则\u名称='Latin1\u General\u BIN2'

我读过一些文章,其中使用存储过程和参数化解决了这个问题。但是,正如我前面提到的,这是一个现有的项目,我已经使用了LinqToSql,不想更改代码。如果列未加密,则插入/更新工作正常


我缺少一些设置吗?请给我指出正确的方向。

将您的列更改为nvarchar并检查。 现在,即使存储密码也不是最好的方法,而是存储一个签名,并在验证密码时验证该签名

检查相同的链接。

谢谢Mukhesh。在我的一些测试中,这似乎可以正常工作,我将检查一些场景,并将您的答案标记为接受。非常感谢你的帮助。这个简单的问题让我揪头发!错误varchar与varchar不兼容(20)还说明了一种情况,即列的大小小于生成的转换键,这就是您无法保存它的原因。您也可以尝试增加数据库中列的大小。这正是我所做的。我将大小增加到varchar(8000)并且成功了。