我的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有问题答案 0 :(得分:1)
Linq to Entities正试图扩展到类似的东西;
select Decrypt(p.Value, @passphrase)
from values p
where p.valueid = @valueId
并且似乎无法将代码的解密功能与服务器上匹配的功能进行匹配。从我见过的其他例子来看,它看起来还不错,所以我怀疑它是一个未成年人的胶水'问题...
我想知道这些中的任何一个是否有用;
答案 1 :(得分:1)
答案很简单。由于resharper的建议,我的EdmFunction使用了错误的引用....正在使用的类是
using System.Data.Entity.Core.Objects.DataClasses;
很抱歉让你们头疼,感谢你们所有的努力!