Dot-Net
無法使用 ADO.NET Entity Framework 執行儲存過程
我創建了一個簡單的無參數儲存過程,已粘貼在下面。我已將儲存過程導入到我的實體模型並創建了一個函式導入。從未創建模型中的函式,我無法使用 ADO.NET 實體框架執行此儲存過程。我在 XML 視圖中打開了 .edmx 文件,並確認此儲存過程沒有錯誤。我究竟做錯了什麼?從Entity Framework中呼叫這麼簡單的儲存過程真的不可能嗎?我已將導入函式的返回類型設置為無,因為此儲存過程不需要返回任何記錄集或值。
儲存過程:
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 '==
首先將其添加到模型中,然後轉到實體容器,然後導入函式。
完整的細節在這裡: