【发布时间】:2016-09-07 05:06:33
【问题描述】:
我的 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 等效项有问题
【问题讨论】:
-
您正在尝试在不会转换为 sql 的表达式中使用代码。只需先返回值,再解密即可。
-
@StephenBrickner 解密功能在 SQL server 上实现;它只是没有与 c# 版本“连接”。
-
您能否通过 Management Studio 中的等效 SELECT 语句正确运行解密功能?你能发布一个成功执行的查询吗?
-
您是否忘记将函数导入您的数据库模型?
-
函数在db模型中。
标签: c# sql entity-framework linq