No se puede ejecutar el procedimiento almacenado con ADO.NET Entity Framework

.net ado.net entity-framework stored-procedures vb.net

Pregunta

He creado un simple procedimiento almacenado sin parámetros que he pegado a continuación. He importado el procedimiento almacenado a mi modelo de entidad y he creado una importación de función. La función en el modelo nunca se crea y no puedo ejecutar este procedimiento almacenado utilizando el Entity Framework de ADO.NET. Abrí el archivo .edmx en la vista XML y confirmé que no hay errores con respecto a este procedimiento almacenado. ¿Qué estoy haciendo mal? ¿Es realmente imposible llamar a un procedimiento almacenado tan simple desde Entity Framework? He establecido el tipo de retorno para la función de importación en Ninguno, ya que este procedimiento almacenado no necesita devolver ningún conjunto de registros o valores.

Procedimiento almacenado:

ALTER PROC [dbo].[Inventory_Snapshot_Create]

AS

SET NOCOUNT ON

DECLARE @Inventory_Snapshot_ID int

INSERT INTO Inventory_Snapshots (snapshot_timestamp)
VALUES (GETDATE())

SET @Inventory_Snapshot_ID = SCOPE_IDENTITY()

INSERT INTO Inventory_Snapshot_Products (inventory_snapshot_id,
    idProduct, stock)

    SELECT @Inventory_Snapshot_ID, idProduct, stock
    FROM products


SET NOCOUNT OFF

Código que intenta ejecutar el procedimiento almacenado:

Dim db As New MilkModel

db.Inventory_Snapshot_Create()

Respuesta aceptada

Gracias, pmarflee.

En realidad, vine aquí para publicar mi resolución a esto y vi su respuesta al mismo tiempo. Este código realmente utiliza la conexión del marco de la entidad y ejecuta el procedimiento almacenado que importé en el modelo. Microsoft sigue presionando a los desarrolladores para que utilicen Entity Framework en lugar de LINQ to SQL y otros generadores DAL, pero EF realmente no está donde debe estar. No lo usaré en proyectos futuros hasta que sea una solución más completa.

Esto es lo que terminé haciendo:

Dim db As New MilkModel

'==
'Begin dirty hack to execute parameterless/resultless stored
'procedure using Entity Framework (well, sort of using EF). 
'http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/44a0a7c2-7c1b-43bc-98e0-4d072b94b2ab/
'==
Dim con As DbConnection = db.Connection

con.Open()

Dim cmd As DbCommand = con.CreateCommand()

With cmd
    .CommandType = CommandType.StoredProcedure
    .CommandText = "MilkModel.Inventory_Snapshot_Create"
    .ExecuteNonQuery()
    .Dispose()
End With

con.Dispose()
'==
'End dirty hack
'==

Respuesta popular

Primero lo agrega al modelo, luego va al contenedor de la entidad y luego a la función Importar.

Todos los detalles aquí:

http://msdn.microsoft.com/en-us/library/bb896231.aspx



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow