【发布时间】: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