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