我還沒有看到任何引用調用與EF(目前使用4.3)存儲過程沒有傳遞任何參數,這被認爲是一種不好的做法,不支持或別的東西,因爲我沒有找到答案任何地方,DBA存儲了很多沒有輸入參數的程序。我可以調用實體框架4.x中的存儲過程沒有輸入參數
一個例子任何人。
我還沒有看到任何引用調用與EF(目前使用4.3)存儲過程沒有傳遞任何參數,這被認爲是一種不好的做法,不支持或別的東西,因爲我沒有找到答案任何地方,DBA存儲了很多沒有輸入參數的程序。我可以調用實體框架4.x中的存儲過程沒有輸入參數
一個例子任何人。
我遇到同樣的問題。如果你傳入Null而不是ObjectParameters,它會拋出一個異常,說你必須有一個異常。
如果你的DBNull通過它說,你已經指定在不除參數和拋出異常的存儲過程的參數。
唯一的解決辦法爲了這個,我已經能夠拿出是修改存儲過程來接受你什麼都不做了虛擬參數,以滿足需求。
它不會出現,你不能在一個空值傳遞。看看ObjectParameter,它有一個重載。價值和類型。
public ObjectParameter(string name, object value);
和
public ObjectParameter(string name, Type type);
您將需要DBNull.Value玩,typeof運算(無論)等...
我通常在我的存儲過程創建一個輸入參數作爲一個變通因爲我沒有時間弄清楚null。
如果你工作數據庫,當你第一次創建/更新你的模型實體框架將顯示存儲過程,包括那些沒有輸入參數,在數據庫中。您可以在模型中包含sprocs,並在模型瀏覽器中添加函數導入。上下文通過調用非通用的ExecuteFunction方法來執行該功能。 (它說它「放棄了從函數返回的任何結果」,但事實並非如此,見下文)。
這是否是不好的做法?不必要。我可以想象用戶可能想要在應用程序中觸發的各種任務,例如,一些執行復雜計算或性能敏感進程的後臺進程。
也許比輸入參數,更重要的是,存儲過程至少回報東西,所以應用程序可以通知是否/何時/何存儲過程的完成的用戶。目前,添加函數導入時,唯一的選擇是返回一個集合,而不是單個標量值。這意味着在sproc中的RETURN
語句將被EF忽略。它應至少返回SELECT
聲明中的值,以便EF能夠收集輸出。
你能否在不傳入參數的情況下調用存儲過程? –
當然,就像在C#中的DoTask()一樣。 –
其實,你可以通過調用存儲過程的只是名稱和留出的參數傳遞任何參數:
context.ExecuteFunction<TestSPROCResult>("TestSPROC");
我將不得不檢查那一個。謝謝馬特 –
這就是我決定現在這樣做,除非有人想出了一個好榜樣因爲我沒有看到別的東西。 –