I am very new to Entity Framework 6 and I want to implement stored procedures in my project. I have a stored procedure as follows:
ALTER PROCEDURE [dbo].[insert_department]
@Name [varchar](100)
AS
BEGIN
INSERT [dbo].[Departments]([Name])
VALUES (@Name)
DECLARE @DeptId int
SELECT @DeptId = [DeptId]
FROM [dbo].[Departments]
WHERE @@ROWCOUNT > 0 AND [DeptId] = SCOPE_IDENTITY()
SELECT t0.[DeptId]
FROM [dbo].[Departments] AS t0
WHERE @@ROWCOUNT > 0 AND t0.[DeptId] = @DeptId
END
Department
class:
public class Department
{
public int DepartmentId { get; set; }
public string Name { get; set; }
}
modelBuilder
.Entity<Department>()
.MapToStoredProcedures(s =>
s.Update(u => u.HasName("modify_department")
.Parameter(b => b.Department, "department_id")
.Parameter(b => b.Name, "department_name"))
.Delete(d => d.HasName("delete_department")
.Parameter(b => b.DepartmentId, "department_id"))
.Insert(i => i.HasName("insert_department")
.Parameter(b => b.Name, "department_name")));
protected void btnSave_Click(object sender, EventArgs e)
{
string department = txtDepartment.text.trim();
// here I want to call the stored procedure to insert values
}
My problem is: how can I call the stored procedure and pass parameters into it?
Mindless passenger has a project that allows for multiple results sets to be returned from a stored proc using entity framework. One of his examples below....
I found that calling of Stored Procedures in Code First approach is not convenient. I prefer to use
Dapper
insteadThe following code was written with
Entity Framework
:The following code was written with
Dapper
:I believe the second piece of code is simpler to understand.
This works for me by pulling back data from a stored procedure while passing in a parameter.
_db
is the dbContextUsing your example, here are two ways to accomplish this:
1 - Use Stored procedure mapping
Note that this code will work with or without mapping. If you turn off mapping on the entity, EF will generate an insert + select statement.
2 - Call the stored procedure directly
I recommend using the first approach, as you can work with the department object directly and not have to create a bunch of SqlParameter objects.
Take a look to this link that shows how works the mapping of EF 6 with Stored Procedures to make an Insert, Update and Delete: http://msdn.microsoft.com/en-us/data/dn468673
Addition
Here is a great example to call a stored procedure from Code First:
Lets say you have to execute an Stored Procedure with a single parameter, and that Stored Procedure returns a set of data that match with the Entity States, so we will have this:
Now lets say that we whant to execute another stored procedure with two parameters:
Notice that we are using index-based naming for parameters. This is because Entity Framework will wrap these parameters up as DbParameter objects fro you to avoid any SQL injection issues.
Hope this example helps!