长话短说:我试图在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