【问题标题】:EF 6.1 Scalar-Valued Functions Database FirstEF 6.1 标量值函数数据库优先
【发布时间】:2014-12-10 03:11:40
【问题描述】:

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

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

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

我无法解析 fn_TotalClient

非常感谢您的建议。

【问题讨论】:

  • EntityFramework 6.1.2 social.msdn.microsoft.com/Forums/en-US/…987654321@中仍然存在的老问题
  • 很高兴您找到了解决方案。只想评论一下,使用可为空的 int 的更好方法是检查其 HasValue 属性:return (result.HasValue ? result.Value : 0);

标签: c# asp.net-mvc entity-framework sql-function


【解决方案1】:

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

但是,我使用了另一种方法,将函数重新开发为表值函数,然后使用 FirstOrDefault() 来获取结果值。

希望这可以帮助面临同样问题的人。

【讨论】:

    【解决方案2】:

    嗯,你需要修改 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-05
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 2013-11-25
      相关资源
      最近更新 更多