.NET Core Web API SQL 服务器存储过程

.NET Core Web API SQL Server stored procedures

我正在尝试创建一个 .NET Core Web Rest API 以将 Infopath 表单连接到它。 我的想法是从表单中捕获数据并将其存储到 SQL 服务器,因为除了插入到 table 之外我还想做一些复杂的事情,我想使用存储过程。我还想查询一些信息,以or/and的形式报告一些。

问题是我不知道这是否是正确的方法。

这是我的测试控制器:

using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using ct3PR.Models;

namespace ct3PR.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class BaseController : ControllerBase
    {
        private readonly baseContext _context;

        public BaseController(baseContext context) => _context = context;

        [HttpGet("{id}")]
        public ActionResult<Base> GetBasesItem(int id)
        {
            var baseItem = _context.BaseItems.Find(id);

            if(baseItem == null)
            {
                return NotFound();
            }

            return baseItem;
        }
    }
}

我已经有一个可以查询的测试数据库:

var baseItem = _context.BaseItems.Find(id);

问题是我想将参数发送到存储过程,但是Find只能通过主键搜索。我想发送日期范围、名称、ID 和日期范围等。

有人可以指导我正确的方向吗?

您可以在 EF 核心中使用 FromSqlRaw 调用存储过程,如下所示:

CREATE PROCEDURE [dbo].[GetBaseItems]
@id int = 0,
@name varchar(50)

操作:

var baseItem = _context.BaseItems.FromSqlRaw("Execute dbo.GetBaseItems @id = {0} ,@name = {1}", id, "itemName");
var itemsList = _context.BaseItems.FromSqlRaw("EXEC SPGetItemsListById @ItemId={0}",Id).ToList();