Procedure Or Function SpAddDepartment Has Too Many Arguments Specified c# ef-fluent-api entity-framework entity-framework-6



I get an error

Procedure or function spAddDepartment has too many arguments specified

How to solve it?

Details: when inserting data into table department using stored procedure spAddDepartment using fluent api in ASP.NET MVC 5, I get that error mentioned above.

Table Departments:

CREATE TABLE [dbo].[Departments]
    [DepartmentID] [int] IDENTITY(1,1) NOT NULL,
    [DepartmentName] [nvarchar](50) NULL,
    [IsActive] [bit] NULL

Stored procedure spAddDepartment:

ALTER Procedure [dbo].[spAddDepartment]
    @DepartmentName    nvarchar(50)
    INSERT INTO Departments 
    VALUES (@DepartmentName, 1) 

Department model class:

public partial class Department
    public Department()
        Employees = new HashSet<Employee>();

    public int DepartmentID { get; set; }

    public string DepartmentName { get; set; }

    public bool? IsActive { get; set; }

    public virtual ICollection<Employee> Employees { get; set; }

Database context:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
                .MapToStoredProcedures(p => p.Insert(sp => sp.HasName("spAddDepartment").Parameter(pm => pm.DepartmentName, "DepartmentName")));


public ActionResult Insert(Department depart)
    depart.IsActive = true;


    return View(depart);

Department view:

<div class="form-horizontal">
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.DepartmentName, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.DepartmentName, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.DepartmentName, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.IsActive, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            <div class="checkbox">
                @Html.EditorFor(model => model.IsActive)
                @Html.ValidationMessageFor(model => model.IsActive, "", new { @class = "text-danger" })
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
2/16/2018 10:03:18 PM

Popular Answer

When you execute SaveChanges(), it will make this call to the database (assuming the DepartmentName is Dep1:

exec [dbo].[spAddDepartment] @DepartmentName=N'Dep1',@IsActive=1

That is why you are getting the error because your stored procedure only has 1 parameter but EF is looking for a stored procedure with 2 parameters.

You ask why 2 parameters? Because your class has 4 properties: one is virtual so that one is ignored, the DepartmentID is identity column so that one will be auto generated and thus not required, the other 2 properties (DepartmentName and IsActive) are required and therefore it is expecting a stored procedure with 2 parameters as shown above.


To fix the issue, add another parameter to your stored procedure.

2/16/2018 10:34:28 PM

Related Questions


Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow