gpt4 book ai didi

entity-framework-4 - 如何从 LINQ to Entities 服务器端调用标量值函数

转载 作者:行者123 更新时间:2023-12-02 19:15:30 25 4
gpt4 key购买 nike

我的数据库中有一个标量值函数:

ALTER FUNCTION [dbo].[fx_fooFunct]
(@MyParam varchar(max))
RETURNS varchar(max)
AS
BEGIN
return @MyParam
END

我想从 LINQ to Entities 查询调用此函数并将结果放入变量中:

let result = this.ObjectContext.ExecuteFunction<string>("SELECT dbo.fx_fooFunct(@MyParam)", new ObjectParameter("MyParam", "hello world")).FirstOrDefault()

但是,当我执行代码时,出现此错误:

LINQ to Entities does not recognize the method 'System.Data.Objects.ObjectResult`1[System.String] ExecuteFunction[String](System.String, System.Data.Objects.ObjectParameter[])' method, and this method cannot be translated into a store expression.

其他信息:

这是服务器上运行的查询的一部分。
由于性能原因,返回所有数据并使用 LINQ to Objects 不是一个选项。

我不确定 ExecuteFunction 的返回类型是否正确,但我不确定它可能是什么......我做错了什么?

编辑
在 Ladislav Mrnka 的回答的帮助下,解决方案如下:

创建公开 SQL 函数的辅助方法:

public class CustomSqlFunctions
{
[EdmFunction("MyModel.Store", "fx_fooFunct")]
public static string FooFunct(string myParam)
{
throw new NotSupportedException("Direct calls not supported");
}
}

LINQ 现在应该显示为:

let result = CustomSqlFunctions.FooFunct("hello world")

最佳答案

您的函数是否已映射到 EDMX 中?我想你不会。

在设计器中运行从数据库更新向导,并在存储过程下选择要导入的 SQL 函数并遵循 this article创建标有 EdmFunctionAttribute 的辅助方法,以公开 LINQ-TO-Entities 的 SQL 函数。

注意:代码优先/流畅 API 不支持 SQL 函数。您需要使用 EDMX 进行映射。

ExecuteFunction 用于调用 EDMX 中映射的功能 - 它需要映射功能的名称(存储过程的函数导入)。 MSDN 说它也可以调用映射函数,但我不知道如何调用 - 它调用函数导入,而 SQL 函数导入没有任何函数。

关于entity-framework-4 - 如何从 LINQ to Entities 服务器端调用标量值函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6998957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com