【发布时间】:2014-12-04 02:26:02
【问题描述】:
长话短说:我正在尝试在 Entity Framework 中运行 Oracle 存储过程(我知道这听起来很奇怪,但是在一般应用程序中使用 Entity Framework 但由于限制,EF 无法处理此特定命令在修改键的值)。
Procedure 有一些参数(仅 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 横幅,则说明未安装该选项。
我认为缺少 Procedural Option 不能成为原因,因为在控制台中创建和运行该过程是可行的。
很遗憾,我的工具不提供分析器,因此我无法捕获实体框架生成的查询。有没有其他方法可以获取执行的查询?或者您可能会发现我的代码有任何问题?
【问题讨论】:
标签: c# sql oracle entity-framework