I am trying to use a stored procedure in the entity framework that returns nothing. The stored procedure is purely for logging.
I added a function (right click -> add -
From EF 4.1, it is possible . Till Ef 4.0 , it is not possible. You can use the following lines for calling sp in ef 4.1
res = ctx.Database.SqlQuery<MyResultType1>(...your SP call...);
For more clarification , please refer Handle Stored Procedure in Entity Framework
This is one way of executing a stored procedure from enitity framework:
using (SEntities se = new SEntities())
{
EntityConnection entityConnection = (EntityConnection)se.Connection;
DbConnection storeConnection = entityConnection.StoreConnection;
storeConnection.Open();
DbCommand command = storeConnection.CreateCommand();
command.CommandText = "NameOfStoredProcedure";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("param1", value_of_param1));
command.Parameters.Add(new SqlParameter("param2", value_of_param2));
SqlParameter param3 = new SqlParameter();
pA.SqlDbType = SqlDbType.Bit;
pA.ParameterName = "@param3";
pA.Direction = ParameterDirection.Output;
command.Parameters.Add(param3);
command.ExecuteNonQuery();
returnValue = Convert.ToBoolean(param3.Value);
}
For now you cannot - you have to use one of the entities defined in your model (although I thought basic scalar types like INT should work, too).
Things should get a lot better with EF4 - due out in late 2009 or early 2010.
See these articles for some info on those new features:
If your stored proc is purely for logging, I would probably just surface it outside the Entity Framework context and just call the stored procedure the good old-fashioned ADO.NET way.... why even bother putting all of that into an EF context? You're not retrieving, manipulating and storing data with this logging service - just make it a static method on a static class - keep it simple!
Marc