長話短說:我試圖在Entity Framework中運行Oracle存儲過程(我知道這聽起來很奇怪,但是在一般的應用程序中使用Entity Framework,但是這個特殊命令不能由於限制修改密鑰的值而被EF處理)。在EntityFramework中執行Oracle存儲過程
過程有一些參數(只有IN)並更新表中的值。我運行測試它:
execute PROCEDURE_NAME('parameter1', parameter2 etc.);
它工作正常。
我的參數定義如下:
OracleParameter param1 = new OracleParameter("PARAM1", OracleDbType.Varchar2, changed.PARAM1, ParameterDirection.Input);
object[] parameters = new object[] {
param1,...};
我的查詢是:
string query = "execute PROCEDURE_NAME(:PARAM1,...);";
我想從C#代碼執行。即通過運行:
_context.Database.ExecuteSqlCommand(query, parameters);
我得到錯誤ORA-00900:原因:語句不被識別爲有效的SQL語句。如果未安裝Procedural Option並且發出需要此選項的SQL語句(例如,CREATE PROCEDURE語句),則可能會發生此錯誤。您可以通過啓動SQL * Plus來確定Procedural Option是否已安裝。如果未顯示PL/SQL標題,則未安裝該選項。
我認爲程序選項的缺乏不能成爲一個原因,因爲在控制檯中創建和運行該程序是有效的。
不幸的是我的工具不提供分析器,所以我無法捕獲由實體框架生成的查詢。有沒有其他的方式來獲得執行的查詢?或者,也許你可以看到我的代碼有任何問題?
謝謝@Landeeyo!我測試過,它適用於我 – 2017-10-05 15:06:25