我们使用 Ado.Net 从 ASP.NET MVC 中的 C# 代码处理数据库。我想使用 Entity Framework,所以我需要使用它的存储过程,从 EF 调用存储过程。
关于如何将存储过程与 Entity Framework 一起使用的示例很少,但没有一个特定于 ASP.NET MVC 和代码优先(至少我找不到)。
它们是一个好的开始,但我需要更多、更好的信息和更好的示例!
我有这个存储过程:
Create Procedure spAddEmployee
@Name nvarchar(50),
@Gender nvarchar(20),
@Salary int,
@EmployeeId int Out
as
Begin
Insert into tblEmployees
values(@Name, @Gender, @Salary)
Select @EmployeeId = SCOPE_IDENTITY()
End
所以@Name
、@Salary
、@Gender
是输入参数,@EmployeeId
是输出参数,它返回新添加的员工的ID
。
谁能告诉我如何使用 Entity Framework(代码优先)通过参数调用这个存储过程?
最佳答案
您可以调用 DbContext
类中的存储过程,如下所示。
this.Database.SqlQuery<YourEntityType>("storedProcedureName",params);
更新:
这是一个如何在 ActionResult 中调用 SP 的示例:
public ActionResult ExecuteProcedure()
{
using(var db = new CueEntities())
{
var parameter = 1;
var query = db.Database.SqlQuery<TestProcedure>("TestProcedure @parameter1",
new SqlParameter("@parameter1", parameter)).ToList();
return Json(query,JsonRequestBehavior.AllowGet);
}
}
第二次更新:
对于多个参数,你可以很容易地像这样:
var param1 = new SqlParameter();
param1.ParameterName = "@Value1";
param1.SqlDbType = SqlDbType.Int;
param1.SqlValue = val1;
var param2 = new SqlParameter();
param2.ParameterName = "@Value2";
param2.SqlDbType = SqlDbType.NVarChar;
param2.SqlValue = val2;
var result = db.tablename.SqlQuery("SP_Name @Value1,@Value2", param1, param2 ).ToList();
关于c# - 在 Asp.Net MVC 5 中使用 Entity Framework 6 代码优先方法调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41341854/