C# 如何在POST方法中调用实体框架核心中存储过程的返回值?
我使用的是EF Core 3.1。这是我的存储过程的片段,不允许我对其进行任何更改。基本上,只需使用EF Core将参数传递到SP并显示返回值C# 如何在POST方法中调用实体框架核心中存储过程的返回值?,c#,sql-server,entity-framework,stored-procedures,entity-framework-core,C#,Sql Server,Entity Framework,Stored Procedures,Entity Framework Core,我使用的是EF Core 3.1。这是我的存储过程的片段,不允许我对其进行任何更改。基本上,只需使用EF Core将参数传递到SP并显示返回值 ALTER PROCEDURE [dbo].[LOG_DELIVERY_ORDER] @Company varchar(50), @Company_Name varchar(50), @Customer_Code varchar(50), @Customer_Name varchar(50), @Customer_
ALTER PROCEDURE [dbo].[LOG_DELIVERY_ORDER]
@Company varchar(50),
@Company_Name varchar(50),
@Customer_Code varchar(50),
@Customer_Name varchar(50),
@Customer_Address varchar(max),
@DO_No varchar(50),
@Invoice_No varchar(50),
@Account_No varchar(50),
@Van_Code varchar(50),
@Salesperson varchar(50),
@Total_Quantity_Loaded int,
@Date_Created datetime,
@Created_By int,
@Location_Created varchar(50)
AS
BEGIN
(the rest)
IF @@ERROR=0
SELECT @@IDENTITY AS result
ELSE
SELECT 0
END
这是执行后的预期回报:
插入参数后,存储过程将返回在“结果”列中生成的最新ID
我的模型:
public partial class LogDeliveryOrder
{
public string CompanyName { get; set; }
public string CustomerCode { get; set; }
public string CustomerName { get; set; }
public string CustomerAddress { get; set; }
public string DoNo { get; set; }
public string InvoiceNo { get; set; }
public string AccountNo { get; set; }
public string VanCode { get; set; }
public string Salesperson { get; set; }
public int TotalQuantityLoaded { get; set; }
public string DateCreated { get; set; }
public int CreatedBy { get; set; }
public string LocationCreated { get; set; }
public string LocationModified { get; set; }
public int result { get; set; }
}
我的实体:
modelBuilder.Entity<LogDeliveryOrder>(entity =>
{
entity.HasNoKey();
entity.Property(e => e.AccountNo);
entity.Property(e => e.CompanyName);
entity.Property(e => e.CreatedBy);
entity.Property(e => e.CustomerAddress);
entity.Property(e => e.CustomerCode);
entity.Property(e => e.CustomerName);
entity.Property(e => e.DateCreated);
entity.Property(e => e.DoNo);
entity.Property(e => e.InvoiceNo);
entity.Property(e => e.LocationCreated);
entity.Property(e => e.LocationModified);
entity.Property(e => e.Salesperson);
entity.Property(e => e.TotalQuantityLoaded);
entity.Property(e => e.VanCode);
entity.Property(e => e.result);
});
但当我尝试将参数插入存储过程时,它会抛出以下错误:
System.InvalidOperationException:“FromSql”操作的结果中不存在必需的列“AccountNo”
但是,我不希望结果中出现
AccountNo
。我只希望返回“result”列。但是,存储过程已成功执行。参数没有插入到表中。但是,我仍然无法检索'result'列和ID。我已经为'result'创建了类和实体。如何检索它?在FromSql调用中使用结果类。如何使用该类?您的意思是“var storedProcedure=context.Resultclass.FromSqlRaw(sql.ToList();”像这样??我是ef core的新手。谢谢你的帮助是的,就是这样!
[HttpPost("LogDeliveryOrder")]
public IActionResult LogDeliveryOrder([FromBody] LogDeliveryOrder deliveryOrder)
{
using (LogDeliveryContext context = new LogDeliveryContext())
{
string sql = $"exec [dbo].[KLCONNECT_LOG_DELIVERY_ORDER_INS_210501] " +
$"@Company = '{deliveryOrder.CompanyName}', " +
$"@Company_Name = '{deliveryOrder.CompanyName}', " +
$"@Customer_Code = '{deliveryOrder.CustomerCode}', " +
$"@Customer_Name = '{deliveryOrder.CustomerName}', " +
$"@Customer_Address = '{deliveryOrder.CustomerAddress}', " +
$"@DO_No = '{deliveryOrder.DoNo}', " +
$"@Invoice_No = '{deliveryOrder.InvoiceNo}', " +
$"@Account_No = '{deliveryOrder.AccountNo}', " +
$"@Van_Code = '{deliveryOrder.VanCode}', " +
$"@Salesperson = '{deliveryOrder.Salesperson}', " +
$"@Total_Quantity_Loaded = {deliveryOrder.TotalQuantityLoaded}, " +
$"@Date_Created = '{deliveryOrder.DateCreated}', " +
$"@Created_By = {deliveryOrder.CreatedBy}, " +
$"@Location_Created = '{deliveryOrder.LocationCreated}' ";
var storedProcedure = context.LogDeliveryOrders.FromSqlRaw(sql).ToList();
return Ok(storedProcedure);
}
}