意外错误:LINQ to Entities无法识别方法' System.String DecryptValue(Byte [],System.String)'方法

时间:2016-05-11 16:43:47

标签: c# sql entity-framework linq

我的udf:

[EdmFunction("Model.Store", "Decrypt")]
public static string Decrypt(byte[] Value, string Passphrase)
{
    throw new NotSupportedException("Direct calls are not supported.");
}

我的LINQ电话:

var passphrase = "phrase123";
var decryptedValue = (from p in unitOfWork.context.Values
                      where p.ValueID== valueId
                      select Decrypt(p.value, passphrase)).FirstOrDefault();

这是实际的错误消息:

  

意外错误:LINQ to Entities无法识别方法' System.String Decrypt(Byte [],System.String)'方法,并且此方法无法转换为商店表达式。

SQL函数

CREATE FUNCTION DB.Decrypt
(
    @Value VARBINARY(200),
    @Passphrase varchar(1000)
)
RETURNS VARCHAR(1000)

如何修复此问题以解密该值?感谢

更新: 我改变了我的edmfunction以尝试处理varbinary:

public static string Decrypt(SqlBinary Value, string Passphrase)

并收到了一条新的错误消息:

  

LINQ to Entities无法识别方法' System.String Decrypt(System.Data.SqlTypes.SqlBinary,System.String)'方法,并且此方法无法转换为商店表达式。

这仍然让我相信C#

中的varbinary equvialent有问题

2 个答案:

答案 0 :(得分:1)

Linq to Entities正试图扩展到类似的东西;

select Decrypt(p.Value, @passphrase) 
from values p
where p.valueid = @valueId

并且似乎无法将代码的解密功能与服务器上匹配的功能进行匹配。从我见过的其他例子来看,它看起来还不错,所以我怀疑它是一个未成年人的胶水'问题...

我想知道这些中的任何一个是否有用;

  • C#Decrypt()将byte []作为第一个参数 - 是p.value的实际数据类型吗?例如,如果它是一个字符串,您可能需要在函数声明中微调类型。
  • 您是否确实在当前连接的数据库上获得了此功能?也许缺少某种更新?

答案 1 :(得分:1)

答案很简单。由于resharper的建议,我的EdmFunction使用了错误的引用....正在使用的类是

using System.Data.Entity.Core.Objects.DataClasses;

很抱歉让你们头疼,感谢你们所有的努力!