【问题标题】:Stored procedure return value -1 in EFEF 中的存储过程返回值 -1
【发布时间】:2019-12-07 07:24:21
【问题描述】:

我正在使用 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

【问题讨论】:

  • 您的第一行代码中的“注册”一词后似乎缺少“>”符号
  • 另外,从注册类中删除名称以使其工作。
  • 旁注:您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免 sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀!
  • 这是错误添加的,但我在代码中添加了@Jawad
  • 从注册这个表名如果我删除表名然后 Reg_id 将显示错误无效列名“Reg_id”@Jawad

标签: c# entity-framework


【解决方案1】:

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

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

【讨论】:

  • @DavidBrowne-Microsoft 你是对的,先生!谢谢!
【解决方案2】:

ExecuteSqlCommand 不用于返回数据,它用于删除、插入和更新。如果您需要从您的 SP 返回数据,请使用FromRawSql

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

【讨论】:

  • 我没有找到 FromSqlRaw ,你能告诉我程序集名称吗?我正在使用存储库模式。
  • @zee 你在使用 EF Core 吗?
  • 没有。我正在使用 EF。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多