stored - ¿Cómo pasar parámetros al procedimiento almacenado desde Entity Framework?
entity framework stored procedure return select (2)
La primera pregunta es: ¿para qué versión del marco de la entidad? .NET 3.5? .NET 4? Las cosas han cambiado significativamente (¡y mejorado!) En .NET 4.
Y en segundo lugar: ¿qué quieres hacer?
recuperar filas de la base de datos
ejecutar un proceso almacenado sin valor de retorno
mapa INSERT / UPDATE / DELETE operaciones en una entidad a un proceso almacenado ??
Estos son tres escenarios bastante diferentes, por lo que necesitamos saber a lo que nos dirigimos.
Además: solo busque con Google (o Bing); hay muchas publicaciones de blog y tutoriales que le muestran cómo hacerlo: una lista rápida:
- Entity Framework con .NET 3.5 y VS 2008 SP1
- Uso de un procedimiento almacenado en Entity Framework 4
- Procedimiento de llamada almacenada desde el marco de la entidad
y literalmente miles más ......
Actualización: bien, entonces quiere recuperar datos de la base de datos. En ese caso, tus pasos son:
- vaya a su modelo EF (archivo * .edmx) en el diseñador
- haga clic derecho y seleccione
Update Model from Database
- elige el procedimiento almacenado que quieras usar y sigue el asistente
Esto crea una entrada para el procedimiento almacenado en su modelo de almacenamiento físico . Siguiente:
- vaya al
Model Browser
(consulte el menú contextual anterior, justo debajo delUpdate Model from Database
), navegue hasta el Modelo de almacenamiento y encuentre su procedimiento - haga clic derecho en ese procedimiento
- Seleccione
Add Function Import
que importa la "función" (procedimiento almacenado) del modelo de almacenamiento físico al modelo conceptual (básicamente, la clase de contexto de la entidad).
Aquí tienes cuatro opciones:
- su proceso almacenado podría no devolver nada (como en mi ejemplo) - entonces es solo un método en su clase de contexto al que puede llamar que hace algo
- su proceso almacenado podría devolver una colección de escalares, por ejemplo, una lista de valores INT o algo así - elija el valor apropiado en el menú desplegable
- su proceso almacenado podría devolver entidades de su modelo, por ejemplo, entidades de
Customer
completas; en ese caso, seleccione la última opción y elija la entidad a la que desea asignar (su proceso almacenado debe devolver todas las columnas para esa entidad, en este caso)
O:
- el proceso almacenado devuelve algo, pero no solo escalares (no solo INT), ni una entidad, en ese caso, puede elegir la tercera opción y definir un nuevo tipo complejo (una clase) que contendrá sus resultados devueltos del procedimiento almacenado. .
Sea lo que sea que haga, básicamente EF creará un método en su clase de contexto de objetos al que puede llamar. Cualquier parámetro que su proceso almacenado requiera serán parámetros de ese método para que pueda pasar fácilmente, por ejemplo, cadenas, ints, etc.
Quiero saber cómo enviar parámetros al procedimiento almacenado desde el marco de la entidad? Gracias por adelantado.
Otro escenario necesita llamar a un procedimiento almacenado con múltiples parámetros de SALIDA. A continuación se muestra una muestra completa.
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;
}
Tenga en cuenta los tipos utilizados (decimal). Si se necesita otro tipo, recuerde no solo cambiarlo en la lista de argumentos del método sino también en SqlDbType.XXX
.