Una forma preferible de implementar SPs en entity frameework en su primer versión, es creando los objetos desde System.Data.SqlClient, de la siguiente manera (Asumiendo que se esta utilizando el modelo de EFPocoAdapter ):
string connection = ((System.Data.Common.DbConnection)((System.Data.EntityClient.EntityConnection)(context.WrappedContext.Connection)).StoreConnection).ConnectionString;
Sin embargo, existe el problema de que el connection string viene contaminado por el uso de EFWrappers ya que hacemos uso de EFCaching, así que haremos uso de “Replace” del objeto “string” para limpiarlo. Al final quedaría así:
public void MySPCall()
{
using (EFContext context = new EFContext())
{
string connection = ((System.Data.Common.DbConnection)((System.Data.EntityClient.EntityConnection)(context.WrappedContext.Connection)).StoreConnection).ConnectionString.Replace("wrappedProvider=;", "");
using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(connection))
{
if (con.State == System.Data.ConnectionState.Closed)
con.Open();
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.Connection = con;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@section_name", "test");
cmd.CommandText = "EntLib_RemoveSection";
cmd.ExecuteNonQuery();
con.Close();
}
}
}
Esta es la solución temporal, Con Entity Framework 4.0 viene una mejor forma de interactuar con los SPs.
