2011-11-30 78 views

回答

6

第一個問題是:針對實體框架的版本? .NET 3.5? .NET 4 ??事情已經改變了顯著(和改進!)在.NET 4

其次:你想做什麼:

  • 從數據庫

  • 檢索行執行一個存儲過程,而不返回值

  • 地圖插入/更新/刪除的實體操作,一個存儲過程??

這些是三個不同的場景 - 所以我們需要知道你要做什麼。

另外:剛剛與谷歌(或Bing)搜索 - 有博客文章的大量和教程在那裏向您展示如何做到這一點 - 一個快速列表:

和數以千計更多......

更新:好了,你想從數據庫中檢索數據。在這種情況下,你的步驟是:

  • 去你的EF模型(* .edmx文件)在設計
  • 右鍵單擊並選擇Update Model from Database
  • 選擇你要使用的存儲過程和去通過嚮導

enter image description here

這將創建存儲過程中的條目您物理儲存模式。下一頁:

  • 轉到Model Browser(?見上面的上下文菜單剛好低於Update Model from Database),導航到存儲模型,找到你的程序
  • 該過程的

enter image description here右擊

  • 選擇Add Function Import從物理存儲模型導入「功能」(存儲程序)插入概念ual模型(您的實體上下文類,基本上)。

enter image description here

在這裏,你有四種選擇:

  • 您的存儲過程可能不會(我的樣品等)任何回報 - 那麼它只是一個方法,你的上下文類,你可以調用這個函數
  • 你的存儲過程可能返回一個標量集合,例如INT值列表或其他內容 - 在下拉列表中選擇適當的值
  • 您的存儲過程可能會從您的模型返回個實體,例如,完整Customer實體 - 在這種情況下,選擇最後一個選項,並選擇您想要映射到實體(你的存儲過程必須返回所有列的是實體,在這種情況下)

OR:

  • 您的存儲過程會返回一些東西 - 但既不是標量(不僅僅是INT),也不是實體 - 在這種情況下,您可以選擇第三個選項並定義一個新的複雜類型(一個類)存儲過程。

無論你做 - 基本上EF將建立一個關於您的對象上下文類方法,你可以調用。您存儲的proc所需的任何參數將爲該方法的參數,因此您可以非常輕鬆地通過例如。字符串,整數等

+0

我使用的是.NET 4.我的存儲過程從我正在查詢的數據表中返回值。但我想從我的程序中傳遞參數給我的存儲過程。 –

+0

@SatishNissankala:大大更新了我的回覆 - 有幫助嗎? –

+0

Thankyou marc_s。這真的很有幫助。 –

2

另一種情況是需要調用具有多個OUTPUT參數的存儲過程。以下是一個完整的示例。

public void MyStoredProc(int inputValue, out decimal outputValue1, out decimal outputValue2) 
{ 
    var parameters = new[] { 
     new SqlParameter("@0", inputValue), 
     new SqlParameter("@1", SqlDbType.Decimal) { Direction = ParameterDirection.Output }, 
     new SqlParameter("@2", SqlDbType.Decimal) { Direction = ParameterDirection.Output } 
    }; 

    context.ExecuteStoreCommand("exec MyStoredProc @[email protected], @[email protected] output, @[email protected] output", parameters); 

    outputValue1 = (decimal)parameters[1].Value; 
    outputValue2 = (decimal)parameters[2].Value; 
} 

請注意使用的類型(十進制)。如果需要另一種類型,記得不僅改變它在方法參數列表也是SqlDbType.XXX

相關問題