.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();
我正在尝试创建一个 .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();