I want to know how to send parameters to stored procedure from entity framework? Thanks in advance.
The real power of stored procedures is the ability to pass parameters and have the stored procedure handle the differing requests that are made.
The Entity Framework has the capability of importing a Stored Procedure as a function. We can also map the result of the function back to any entity type or complex type.
First question is: for which version of the Entity Framework?? .NET 3.5? .NET 4 ?? Things have significantly changed (and improved!) in .NET 4.
And secondly: what do you want to do:
retrieve rows from the database
execute a stored proc without return value
map INSERT/UPDATE/DELETE operations on an entity to a stored proc??
These are three pretty different scenarios - so we need to know what you're going for.
Also: just search with Google (or Bing) - there are plenty of blog post and tutorials out there showing you how to do it - a quick list:
and literally thousands more ......
Update: ok, so you want to retrieve data from the database. In that case, your steps are:
Update Model from Database
This creates an entry for the stored procedure in your physical storage model. Next:
Model Browser
(see the above context menu? It's just below Update Model from Database
), navigate to the Storage Model and find your procedureAdd Function Import
which imports the "function" (stored procedure) from the physical storage model into the conceptual model (your entity context class, basically).Here, you have four choices:
Customer
entities - in that case, select the last option and pick the entity you want to map to (your stored proc must return all columns for that entity, in this case)OR:
Whichever you do - basically EF will create a method on your object context class that you can call. Any parameters your stored proc requires will be parameters of that method so you can very easily pass in e.g. strings, ints etc.
Another scenario is needing to call a stored procedure with multiple OUTPUT parameters. Below is a complete sample.
public void MyStoredProc(int inputValue, out decimal outputValue1, out decimal outputValue2)
{
var parameters = new[] {
new SqlParameter("@0", inputValue),
new SqlParameter("@1", SqlDbType.Decimal) { Direction = ParameterDirection.Output },
new SqlParameter("@2", SqlDbType.Decimal) { Direction = ParameterDirection.Output }
};
context.ExecuteStoreCommand("exec MyStoredProc @InParamName=@0, @OutParamName1=@1 output, @OutParamName2=@2 output", parameters);
outputValue1 = (decimal)parameters[1].Value;
outputValue2 = (decimal)parameters[2].Value;
}
Please note the Types used (decimal.) If another type is needed, remember to not only change it in the method argument list but also the SqlDbType.XXX
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With