Dot-Net

無法使用 ADO.NET Entity Framework 執行儲存過程

  • March 26, 2012

我創建了一個簡單的無參數儲存過程,已粘貼在下面。我已將儲存過程導入到我的實體模型並創建了一個函式導入。從未創建模型中的函式,我無法使用 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
'==

首先將其添加到模型中,然後轉到實體容器,然後導入函式。

完整的細節在這裡:

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

引用自:https://stackoverflow.com/questions/791581