LINQ to SQL在填充对象之前解密值

我的一个表中有一个字段使用加密

ENCRYPTBYPASSPHRASE(,) 

当值被放入对象时,该字段仍然是加密的,因此我无法对其进行任何操作。 我无法创建一个视图或存储过程或任何其他解密数据库字段的项目,因为它失去了加密字段的目的。 有没有办法使框架工作运行像

 DECRYPTBYPASSPHRASE(, ) 

在将值赋给对象之前?

现在我正在获取数据,然后调用ExecuteQuery来解密该值。 并在我的数据模型类的加密值上分配新值。 它有效,但我只是想知道它是否可以通过我不知道的一些选项自动完成。 我试过搜索但没找到任何东西。

正如这个小提琴所certificate的,以下SQL非常有效,

 SELECT E.[Key], CAST( DecryptByPassPhrase( 'test', E.[Encrypted]) AS varchar(8000)) [Clear], E.[Other] FROM [Example] E; 

所以使用ExecuteQuery的这个重载来做类似的事情,

 var examples = context.ExecuteQuery( @"SELECT E.[Key], CAST( DecryptByPassPhrase( @p0, E.[Encrypted]) AS varchar(8000)) [Clear], E.[Other] FROM [Example] E;", passPhrase); 

在一次通话中检索和解密您的数据。

我假设您正在使用linq-to-sql并且您从中提取的表的结构如下:

 +--------+---------------+ | UserId | Passphrase | +--------+---------------+ | 1 | laskdfmlsadkf | +--------+---------------+ 

使用此信息,您可以在选择期间应用解密方法。

 var password = "password"; var userId = 1; var result = usertable.Where(c => c.UserId == userId).ToList() .Select(t => new { Passphrase = DECRYPTBYPASSPHRASE(t.Passphrase) }).First() bool areSame = (password == result.Passphrase);