EF 6.1标量值函数数据库优先

本文关键字:数据库 函数 标量 EF | 更新日期: 2023-09-27 18:26:36

我的应用程序是c#MVC5,使用EF 6.1。使用数据库优先导入表和函数。我可以在模型(emdx)浏览器中看到DALModel.Store/Stored Procedures/Functions(灰色)下列出的函数。

我正在尝试使用以下功能:

using (var ctx = new DALEntities())
{
    int? result = ctx.fn_TotalClient(MemberRepository.AllowedCId, fromDate, toDate);
    return (result != null ? result.Value : 0);
}

我无法解决fn_TotalClient

非常感谢您的建议。

EF 6.1标量值函数数据库优先

显然我不能直接在模型中使用标量值函数;我在这个博客中找到了一个解决方案http://programmaticponderings.wordpress.com/2012/11/22/first-impressions-of-database-first-development-with-entity-framework-5-in-visual-studio-2012/.

然而,我使用了一种不同的方法,将函数重新开发为表值函数,然后使用FirstOrDefault()来获得结果值。

希望这能帮助到面临同样问题的人。

好吧,您需要修改SQL将单个/标量值转换为表值函数,然后它就会工作。

标量函数,它不起作用

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