2011-02-14 21 views
51

Estoy usando .NET 3.5 SP1, VS 2008 con el marco de entidades. 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.Actualizar un procedimiento almacenado en el marco de entidad 3.5

¿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.

+1

Creo que es el prob de EF1.0 :( – anishMarokey

+1

intente quitar y volver a agregar –

+0

¿Cómo puedo saber qué versión de EF estoy funcionando? ¿Existe una versión actualizada del EF disponible para 3.5? – Jeff

Respuesta

128

que he visto dos problemas con la actualización de un procedimiento almacenado después de añadir a la marco de la entidad:

  • La importación función creada para llamar al procedimiento almacenado no ha sido actualizada (, fuera de la fecha de parámetros incorrectos
  • )
  • el tipo complejo creado para el conjunto de resultados del procedimiento almacenado no ha sido actualizada (, fuera de la fecha de campos incorrectos)

actualización del modelo EDMX (de importación) función

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

Actualizando el procedimiento almacenado complejo tipo

  1. abrir el "navegador Modelo" ventana mientras usted tiene la .edmx abierta.

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

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

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

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

+21

¿Soy yo o es esto? un enfoque demasiado complejo y ofuscado de lo que parece estar diseñado para acelerar la creación de aplicaciones? Además, este problema todavía está sucediendo con EF6 = ( Además, gracias por esta publicación, durante mucho tiempo he estado maldiciendo el marco de EF como he eliminado y vuelto a crear mi edmx cada vez que hice una actualización. – Josh

+9

No Josh , no es solo usted. Es demasiado complejo y puede desperdiciar horas intentando que Entity Framework funcione con los procedimientos almacenados. ¿Y por qué EF debe trabajar con un procedimiento almacenado? Porque a veces esa es la mejor solución. No me malinterpreten. EF es bueno, pero seguramente los procedimientos almacenados deberían ser tan fáciles de encontrar como las tablas, no ocultos como un pariente anciano del que uno está avergonzado. –

+0

Estoy usando EF6 y estoy teniendo problemas con el mismo problema, pero esta respuesta no me ayudó. funcionó para mí, así que borraré y crearé mi modelo de datos de nuevo. – MelgoV

0

Tiene que eliminar y volver a agregar procedimientos almacenados ya que la entidad marco 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 la firma de devolución, no necesita volver a agregarla. 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.

+0

Intenté esto y no funcionó Dado que la función "Actualizar modelo ..." nunca sincronizó realmente el modelo con la base de datos, realizando una función de importación en el sproc obsoleto recreó la firma anterior. – Jeff

+0

Así que, básicamente, nunca podría eliminar el procedimiento del modelo y volver a agregar el modelo con el nuevo procedimiento actualizado? – Vishal

+0

correcto. Así es como parece. Ahora estoy tratando de renunciar al diseñador vs y edito el XML directamente. mira si funciona mejor – Jeff

1

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

1

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.

0

tenido un problema similar en EF4 donde no hay opción para actualizar sps individuales, se supone que debe hacerlo cuando se hace clic en Actualizar en el asistente de actualización, pero no funciona de forma fiable. 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.

+0

Revisado esto y la segunda parte de la respuesta anterior de DaveD en realidad también resolvió el problema en EF4. –

6

Si necesita cambiar tipos de datos de las columnas del conjunto de resultados -> en el comienzo de la proc stor añadir conjunto FMTONLY fuera

A continuación, utilice explorador de modelos -> Importar Función - -> Editar su Proc -> botón Obtener Información columna -> botón Actualizar

Así es como Neil lo hace :)

+2

¿Quién es este Neil? – Beanwah

0

también puede borrar toda evidencia de la SP en los siguientes lugares, tesis archivos pueden se encuentra en el navegador de modelos cuando abres el archivo .edmx:

  • YourModel> Tipos complejos;
  • YourModel> Function Imports;
  • YourModel.Store> Procedimientos almacenados/Funciones.

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

13

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

Cuando trae un procedimiento almacenado en el EDMX (estoy hablando de uno que devuelve un conjunto de resultados, pero va a ser un proceso similar), se crean 3, no 1, y eso es la fuente 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.

SO Haga lo siguiente:

en el navegador de modelo, por lo general a la izquierda, pegue el nombre de su procedimiento almacenado en el cuadro de búsqueda, haga clic en Enter (o búsqueda) se aterrizará en la primera instancia - probablemente!. el procedimiento almacenado en sí. Haga clic derecho y eliminar. Ahora, coloque el cursor nuevamente en el cuadro de búsqueda -> presione enter o search nuevamente. Ahora llegará a la importación de la función. Haga clic derecho y elimine. Haga lo mismo por tercera vez - esto hará aterriza en el tipo complejo que representa el conjunto de resultados. Elimínalo. ¡Ahora terminaste NO! Tienes que sa ve lo que acabas de hacer, para que las eliminaciones se escriban (sin escribir) en el edmx.

Ahora, vaya a obtener el procedimiento almacenado de nuevo (modelo actualizado/seleccione el proceso 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.

+0

¡Gracias, he estado tratando de descubrir cómo eliminar/volver a agregar el proceso almacenado! –

+0

Esto funciona. Para que aparezca la pestaña del Navegador de modelos, primero debe hacer clic en el diagrama del modelo de edmx. –

Cuestiones relacionadas