usar stored sets net mvc multiple framework executesqlcommand asp visual-studio-2008 entity-framework stored-procedures

visual-studio-2008 - sets - executesqlcommand entity framework stored procedure



Actualizar un procedimiento almacenado en el marco de entidad 3.5 (8)

Estoy usando .NET 3.5 SP1, VS 2008 con el marco de la entidad. Originalmente agregué un procedimiento almacenado a mi modelo que tomó 2 parámetros. Más tarde, cambié el sproc para solo tomar 1 parámetro. Ejecuté la opción de menú Update Model From Database y confirmé que mi sproc estaba en la lista en la pestaña Refresh . Terminó el asistente, limpió y reconstruyó la solución y el modelo nunca cambió la firma del sproc.

¿Por qué no está actualizando? ¿Está roto el modelo de actualización de la función de base de datos? ¿Me estoy perdiendo de algo? Gracias.


Debe eliminar y volver a agregar procedimientos almacenados ya que la infraestructura de la entidad necesita generar una nueva definición para su procedimiento. Supongo que debes volver a hacer la importación de la función.

Básicamente, si cambió la lógica del procedimiento y no el tipo o firma de devolución, no necesita agregarla nuevamente. Funcionará bien, pero si cambia el tipo de devolución o la firma, ef necesita generar y asignarla a una nueva definición que es la forma en que funciona.


He visto dos problemas con la actualización de un Procedimiento almacenado después de agregarlo al marco de entidades:

  • La función de importación creada para llamar al SPROC no se actualizó (parámetros incorrectos y desactualizados)
  • El tipo complejo creado para el conjunto de resultados del SPROC no se actualizó (campos incorrectos y desactualizados)

Actualización del modelo EDMX (importación de funciones)

  1. Abra el archivo .edmx (en el diseñador de GUI).
  2. Haga clic derecho en un espacio abierto y seleccione "Actualizar modelo desde la base de datos".
  3. Haga clic en Finalizar (cuando sea posible) en la ventana emergente. La firma de su SPROC debe actualizarse (junto con cualquier Importación de funciones).

Actualización del tipo complejo de procedimiento almacenado

  1. abra la ventana " Navegador de modelos " mientras tiene el .edmx abierto.

  2. Expanda el ContentModel , EntityContainer: ... , y luego los nodos de Importación de funciones . Busque la importación de función para su procedimiento almacenado y haga doble clic en él. Se abrirá la misma ventana que utilizó para crearlo, pero ahora se llenó con sus datos.

  3. Haga clic en el botón Obtener información de columna (observe la cuadrícula debajo del botón para ver qué se cambiará).

  4. Haga clic en el botón Actualizar al lado de la opción del botón de opción "Complejo".

  5. Haga clic en Aceptar y se actualizará el Tipo complejo para su conjunto de resultados.


No tiene que editar el edmx / xml. HACER ESTO:

Cuando lleva un procedimiento almacenado al EDMX (estoy hablando de uno que devuelve un conjunto de resultados, pero va a ser un proceso similar), se crean 3, no 1, elementos, y ese es el origen del problema. (*** la segunda fuente del problema es que tiene que GUARDAR explícitamente después de eliminar objetos, antes de volver a importar objetos; de lo contrario, los objetos recién reimportados entrarán en conflicto con lo que no se ha eliminado realmente (guardando) de edmx.

¡ASI QUE! Hacer esto:

En el Explorador de modelos, generalmente a la izquierda, pegue el nombre de su procedimiento almacenado en el cuadro de búsqueda, haga clic en ingresar (o buscar). Caerá en la primera instancia, probablemente el procedimiento almacenado en sí. Haga clic derecho y eliminar. Ahora, vuelva a colocar el cursor en el cuadro de búsqueda -> presione enter o search nuevamente. Ahora aterrizará en la función de importación. Haga clic derecho y eliminar. Haga lo mismo por tercera vez: esto aterrizará en el tipo complejo que representa el conjunto de resultados. Bórralo. ¡¡Ahora terminaste NO !!!!! Tienes que guardar lo que acabas de hacer, para que las eliminaciones se escriban (sin escribir) en el edmx.

Ahora, obtenga el procedimiento almacenado de nuevo (modelo actualizado / seleccione el procedimiento almacenado). AHORA HAGA CLIC AHORRE OTRA VEZ.

Eso funcionará todo el tiempo. La clave es asegurarse de que cuando se utiliza el navegador modelo para buscar TODAS las instancias del nombre del procedimiento almacenado que aparece en el navegador modelo, y por eso, es mejor no preocuparse por las convenciones de nomenclatura predeterminadas. La segunda clave es GUARDAR después de completar cualquier paso.


Si necesita cambiar los tipos de datos de las columnas en el conjunto de resultados -> en el comienzo de stor proc add set fmtonly off

A continuación, utilice el Explorador de modelos -> Importación de funciones -> Edite su proc -> Botón Obtener información de columna -> Botón Actualizar

Así es como lo hace Neil :)


También puede borrar toda la evidencia del SP en los siguientes lugares, estos archivos se pueden encontrar en el Navegador de Modelos cuando abre el archivo .edmx:

  • YourModel> Tipos complejos;
  • YourModel> Importación de funciones;
  • YourModel.Store> Procedimientos almacenados / Funciones.

Después de eliminarlo, puede volver a agregarlo sin problemas.


Tomó mucha edición manual en el XML y reinicios en pareja de Visual Studio, pero finalmente pude hacer que VS olvidara la firma anterior. Luego usé el asistente de EF normal para volver a agregarlo y funcionó bien.


Tuve un problema similar en EF4, donde no hay ninguna opción para actualizar los sps individuales, está destinado a hacerlo cuando hace clic en actualizar en el asistente de actualización, pero no funciona de manera confiable. Tuve que eliminar en el navegador de modelos los tipos complejos para los valores devueltos, y también la función de importación. A continuación, vaya al archivo edmx con el editor XML y elimine la referencia al proceso almacenado (no se pudo encontrar una manera de hacerlo en el navegador modelo). Luego vuelve a agregar los sps.


si cambia la firma del proceso almacenado, necesitará actualizar cualquier tipo complejo creado en el modelo a través de la función de importación.