是否可以映射到 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 获取值,而不是作为“独立”方法。
在 SQL Server 中,您根本无法在查询之外调用 UDF。你必须使用
SELECT IsNumberValid(..)
。在 EF Core 7 中,您可以使用 SqlQuery
调用此查询。
您可以通过向 DbContext 添加自定义方法来将其从应用程序代码的其余部分隐藏:
public bool IsNumberValid(int number)
{
return this.SqlQuery<int>($"SELECT IsNumberValid({number})")
.FirstOrDefault() == 1;
}