Невозможно выполнить хранимую процедуру с ADO.NET Entity Framework

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

Вопрос

Я создал простую хранимую процедуру без параметров, которую я вставил ниже. Я импортировал хранимую процедуру в свою Entity Model и создал функцию Import. Функция в модели никогда не создается, и я не могу выполнить эту хранимую процедуру с помощью ADO.NET Entity Framework. Я открыл файл .edmx в представлении XML и подтвердил, что в этой хранимой процедуре нет ошибок. Что я делаю неправильно? Действительно ли невозможно вызвать такую простую хранимую процедуру из Entity Framework? Я установил тип возвращаемого значения для функции импорта как None, поскольку для этой хранимой процедуры не нужно возвращать наборы записей или значения.

Хранимая процедура:

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

Код пытается выполнить хранимую процедуру:

Dim db As New MilkModel

db.Inventory_Snapshot_Create()

Принятый ответ

Спасибо, pmarflee.

Я на самом деле пришел сюда, чтобы опубликовать свое решение по этому вопросу и в то же время увидел ваш ответ. Этот код фактически использует соединение структуры сущностей и выполняет хранимую процедуру, которую я импортировал в модель. Microsoft продолжает настаивать на том, чтобы мы, разработчики, использовали Entity Framework вместо LINQ to SQL и других генераторов DAL, но EF на самом деле совсем не там, где нужно. Я не буду использовать его в будущих проектах, пока это не станет более полным решением.

Вот что я в итоге сделал:

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
'==

Популярные ответы

Сначала вы добавляете его в модель, затем идете в Контейнер сущностей, затем импортируете функцию.

Полная информация здесь:

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



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow