【问题标题】:.NET Core Web API SQL Server stored procedures.NET Core Web API SQL Server 存储过程
【发布时间】:2020-03-26 23:37:02
【问题描述】:

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

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

这是我的测试控制器:

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 和日期范围等。

有人能指引我正确的方向吗?

【问题讨论】:

  • 使用 LINQ .Where(...) 子句而不是 .Find() - 它允许您搜索基础数据库表的任何列

标签: .net sql-server api asp.net-core-mvc infopath


【解决方案1】:

您可以在 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");

【讨论】:

  • 如果我想从 de SP 返回数据,我的模型会怎样?例如,如果我想获取数据并使用 ToList()
  • @FcoLG 我不太明白......也许你可以通过打开一个新线程来更清楚地描述你的问题来提出一个新问题。(你做了什么,当前结果,预期结果.. )
【解决方案2】:
var itemsList = _context.BaseItems.FromSqlRaw("EXEC SPGetItemsListById @ItemId={0}",Id).ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 2022-10-22
    • 2014-03-30
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多