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

时间:2019-12-06 16:13:04

标签: c# entity-framework

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

当我使用此

@executable_path

我遇到了错误

  

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

模型类:

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

EShoppingConcrete:

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

控制器:

 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;
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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