Entity framework 4 如何从LINQ调用标量值函数到服务器端实体

Entity framework 4 如何从LINQ调用标量值函数到服务器端实体,entity-framework-4,linq-to-entities,entity-framework-4.1,user-defined-functions,Entity Framework 4,Linq To Entities,Entity Framework 4.1,User Defined Functions,我的数据库中有一个标量值函数: ALTER FUNCTION [dbo].[fx_fooFunct] (@MyParam varchar(max)) RETURNS varchar(max) AS BEGIN return @MyParam END 我想从LINQ到Entities查询调用此函数,并将结果放入变量: let result = this.ObjectContext.ExecuteFunction<string>("SELECT dbo.fx_fooFunct(

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

ALTER FUNCTION [dbo].[fx_fooFunct]
  (@MyParam varchar(max))
RETURNS varchar(max)
AS
BEGIN
  return @MyParam
END
我想从LINQ到Entities查询调用此函数,并将结果放入变量:

let result = this.ObjectContext.ExecuteFunction<string>("SELECT dbo.fx_fooFunct(@MyParam)", new ObjectParameter("MyParam", "hello world")).FirstOrDefault()
LINQ现在应该是:

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

您是否在EDMX中映射了函数?我想你没有

在设计器中运行“从数据库更新”向导,并在“存储过程”下选择要导入的SQL函数,然后按照创建标有
EdmFunctionAttribute
的帮助器方法将LINQ的SQL函数公开给实体

注意:代码优先/fluent API中不支持SQL函数。您需要将映射与EDMX一起使用


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

好吧,您需要修改SQL以将单值/标量值转换为表值函数,然后它就可以工作了。因为目前还不支持标量值函数

标量函数,它不起作用

标量函数->转换为表值函数,可以工作


太好了,非常感谢。我已经用解决方案更新了我的问题。
let result = CustomSqlFunctions.FooFunct("hello world")
CREATE FUNCTION [dbo].[GetSha256]
(
    -- Add the parameters for the function here
    @str nvarchar(max)
)
RETURNS VARBINARY(32)
AS
BEGIN
    RETURN ( SELECT * FROM HASHBYTES('SHA2_256', @str) AS HASH256 );
END -- this doesn't work.
CREATE FUNCTION [dbo].[GetSha2561]
(
    -- Add the parameters for the function here
    @str nvarchar(max)
)
RETURNS  @returnList TABLE (CODE varbinary(32))
AS
BEGIN

    INSERT INTO @returnList
    SELECT HASHBYTES('SHA2_256', @str);

    RETURN; -- This one works like a charm.

END