gpt4 book ai didi

.net - 函数从 SQL Server 导入到 Entity Framework 运行时异常

转载 作者:行者123 更新时间:2023-12-04 06:18:39 24 4
gpt4 key购买 nike

我正在尝试将数据库中的存储过程映射到 EF 上的函数,以使用 LINQ 在我的代码中构建查询。

我的存储过程返回/选择(都试过,没有区别)一个整数值。我可以映射到一个函数中,并在代码中查看它(具有正确的输入/输出类型),但是每当我尝试执行查询时,我都会收到此异常:

LINQ to Entities does not recognize the method 'System.Data.Objects.ObjectResult`1[System.Nullable`1[System.Int32]] HammingDistance(System.Nullable`1[System.Int64], System.Nullable`1[System.Int64])' method, and this method cannot be translated into a store expression.

导致错误的 LINQ 是这样的:
db.HammingDistance(targetPhoto.Analysis.Hash, p.Analysis.Hash).FirstOrDefault().Value < 10
这是在 where条款。没有这部分,查询运行没有问题。

是的,我的名为 HammingDistance 的过程接受两个 long 并返回一个 int。
我也尝试将它创建为 sql server 函数而不是存储过程,但是我无法将它作为函数导入,这正是我想要的。我有涉及该过程的复杂查询(并在管理工作室进行了测试,它确实可以工作并正确返回值),数据库或代码上都没有空值,这不是问题。我已经仔细检查了我的程序是否存在并在错误发生后工作,没有更改 SQL 代码。但 LINQ 不承认这一点。最后,是的,我需要它在 SQL Server 上运行,我无法处理从数据库中提取所有字段并在 ASP.NET 上运行。我知道这是可以做到的,而且我很确定这是一个配置问题,因为我的数据库和网站以及 LINQ 查询在没有调用 HammingDistance 的情况下都可以完美运行,但我当时无法将它们联系起来。

最佳答案

您不能从 linq-to-entities 查询调用存储过程。这与直接使用 SQL 时相同 - 您不能将存储过程调用作为 SQL SELECT 的一部分。您必须改为创建 SQL 函数和 import it to your EF model .

关于.net - 函数从 SQL Server 导入到 Entity Framework 运行时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com