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
非常感谢您的建议。
显然我不能直接在模型中使用标量值函数;我在这个博客中找到了一个解决方案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