配置 Entity Framework 7 以运行用户定义的 SQL Server 函数

问题描述 投票:0回答:1

是否可以映射到 DbContext 用户定义的 sql server 函数并将其用作 C# 代码中的标准方法?

假设我有一个 db 函数:

CREATE FUNCTION [IsNumberValid](
@number INT

各种原因的所有逻辑都在数据库中。

现在我想要这样的东西:

_dbContext.IsNumberValid(x)

可以吗?

我找到一篇文章: https://learn.microsoft.com/en-us/ef/core/querying/user-definition-function-mapping

但是如果方法在 LINQ 查询之外执行,它就不起作用,所以据我了解,当我们需要向查询添加一些逻辑时,它很有用,但我只想将它用作 linq 查询之外的标准方法,甚至在 linq 中然后查询,无需任何其他 DbSet。所以就像所附链接中所描述的那样:

var query2 = from p in context.Posts
         select context.PercentageDifference(p.BlogId, 3);

所以这里的函数:PercentageDifference 很棒,但它是在过滤器中执行的,用于从 context.Posts 获取值,而不是作为“独立”方法。

c# .net sql-server entity-framework
1个回答
0
投票

在 SQL Server 中,您根本无法在查询之外调用 UDF。你必须使用

SELECT IsNumberValid(..)
。在 EF Core 7 中,您可以使用
SqlQuery
调用此查询。

您可以通过向 DbContext 添加自定义方法来将其从应用程序代码的其余部分隐藏:

public bool IsNumberValid(int number)
{
    return this.SqlQuery<int>($"SELECT IsNumberValid({number})")
               .FirstOrDefault() == 1;
}
© www.soinside.com 2019 - 2024. All rights reserved.