gpt4 book ai didi

sql-server - EF core 2.1 中的问题映射标量函数

转载 作者:行者123 更新时间:2023-12-05 03:02:38 26 4
gpt4 key购买 nike

我正在尝试映射具有自定义架构的数据库的标量函数。这就是我在上下文中注册函数的方式:

 [DbFunction("ProjectMaterial_GetCostPrice","Project")]
public static decimal ProjectMaterial_GetCostPrice (int ProjectMaterialID, decimal ExtCost)
{
return 0;
}

我正在上下文的部分类中注册标量函数。这是数据库中标量函数的架构:

-- Select Project.ProjectDriver_GetCostPrice (5456921)

ALTER FUNCTION [Project].[ProjectMaterial_GetCostPrice] (@ProjectMaterialID int, @ExtCost money)
RETURNS MONEY
AS

我还按照文档的建议用 throw 更改了方法的主体:

throw new NotSupportedException();

它抛出异常而不是调用函数

我是这样调用函数的:

 var newCostPrice= NsiteDBContext.ProjectMaterial_GetCostPrice(projectMaterial.ProjectMaterialId, projectMaterial.CostPrice.Value);

最佳答案

使用调用本身会抛出异常,因为它实际上执行了 C# 代码。推荐抛出异常的原因正是这样,避免无意中使用,即直接调用它。该签名将由给定的 LINQ 提供程序解释并转换为正确的 SQL 语句。

为此,EF 上下文需要知道如何使用某种方式可能是

var items = await ctx.Materials.Select(c = > new {
Material= c,
CostPrice = ProjectMaterial_GetCostPrice(c.ProjectMaterialId, c.CostPrice.Value),
}).ToListAsync();

现在 ctx 对象在解析表达式树时将知道如何翻译 ProjectMaterial_GetCostPrice 签名。

在 select 语句之外进行操作,即使通过静态调用也不会按预期工作,它会抛出该异常(以通知我们这一点)。

关于sql-server - EF core 2.1 中的问题映射标量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54657849/

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