繁体   English   中英

EF 中的存储过程返回值 -1

[英]Stored procedure return value -1 in EF

我正在使用 EF 并且我正在调用一个存储过程。 我得到的返回值是 -1,但是当我在 SQL Server 中执行这个存储过程时,结果是正确的。

当我使用这个

var Reg_ID = _db.Database.SqlQuery<Registration("SP_RandomNo_Reg").SingleOrDefault();

我得到了错误

"System.Data.Entity.Core.EntityCommandExecutionException: '数据读取器与指定的 'ECommercedbModel.Registration' 不兼容。类型为 'Name' 的成员在数据读取器中没有对应的同名列.'”

模型类:

 public partial class Registration
 {
     public int Reg_ID { get; set; }
     public string Name { get; set; }
 }

Eshopping混凝土:

 public string mMaxNo_Reg()
 {
     var Reg_ID = _db.Database.ExecuteSqlCommand("SP_RandomNo_Reg");
     return Reg_ID.ToString();
 }

控制器:

public JsonResult mMax_No_Rg()
{
    try
    {
        ViewBag.max_ID = _IRegistration.mMaxNo_Reg();
        return Json(ViewBag.max_ID, JsonRequestBehavior.AllowGet);
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

存储过程:

ALTER PROCEDURE [dbo].[SP_RandomNo_Reg] 
AS
BEGIN
    SELECT
        RIGHT('000'+ CAST(ISNULL(MAX(Reg_ID), 0) + 1 AS VARCHAR(4)) + '', 4) AS Reg_ID 
    FROM 
        Registration
END

要执行存储过程并返回类型字符串,请将语句更改为:

public string mMaxNo_Reg()
{
     return _db.Database.SqlQuery<string>("SP_RandomNo_Reg").Single();
}

ExecuteSqlCommand不是用于返回数据,而是用于 DELETE、INSERT 和 UPDATE。 如果您需要从 SP 返回数据,请使用FromRawSql

public string mMaxNo_Reg()
{
     var reg = _db.Registrations.FromSqlRaw("EXECUTE SP_RandomNo_Reg");
     return reg.Reg_ID.ToString();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM