You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 3.1控制器如何调用SQL Server标量函数并赋值给模型属性

ASP.NET Core 3.1 调用SQL Server标量函数实现方案

前置修正:Employee 模型类语法修复

你提供的模型类存在语法错误,修正后代码如下:

// Employee.cs
public class Employee
{
    public int Id { get; set; }
    public string EmpName { get; set; }
    public decimal EmpHrs { get; set; }
}

方案1:无需修改DbContext,直接执行SQL获取标量值(推荐快速实现)

直接在控制器方法中通过数据库连接对象执行标量查询即可,代码示例:

// 控制器方法内逻辑
var emp = new Employee();
// 若需给现有库中实例赋值,替换为查询逻辑即可:
// var emp = dbContext.Employees.FirstOrDefault(x => x.Id == 目标ID);

using var command = dbContext.Database.GetDbConnection().CreateCommand();
command.CommandText = "SELECT dbo.EmpHrs()";
command.CommandType = System.Data.CommandType.Text;

if (dbContext.Database.GetDbConnection().State != System.Data.ConnectionState.Open)
{
    dbContext.Database.OpenConnection();
}

var scalarResult = command.ExecuteScalar();
emp.EmpHrs = Convert.ToDecimal(scalarResult);

方案2:配置DbContext映射标量函数,支持LINQ调用

如果你需要在多个地方调用该标量函数,可通过DbFunction特性完成映射,实现更规范的调用:

  1. 在你自定义的DbContext类中添加函数映射定义
// 你的DbContext类中添加以下代码
public class YourDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }

    // 映射SQL Server的dbo.EmpHrs标量函数
    [DbFunction("EmpHrs", "dbo")]
    public static decimal EmpHrs()
    {
        throw new NotSupportedException("该方法仅用于EF Core映射数据库标量函数,不可直接调用");
    }

    // 原有OnModelCreating等其他代码保持不变
}
  1. 控制器中调用逻辑
// 控制器中直接调用映射后的函数即可
var emp = new Employee();
emp.EmpHrs = YourDbContext.EmpHrs();

// 也可直接在LINQ查询中使用,例如:
var empList = dbContext.Employees.Select(e => new Employee
{
    Id = e.Id,
    EmpName = e.EmpName,
    EmpHrs = YourDbContext.EmpHrs()
}).ToList();

内容的提问来源于stack exchange,提问作者Alan Pauil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:36:02