我有一个复杂的查询要执行,我想在SQL中执行它,而不是使用linq查询,因为在SQL中太快了。
我一直在网上搜索,如果EF6支持使用CodeFirst的存储过程,我没有太多清楚。
我有一个这样的程序(Get resultset from oracle stored procedure)来获取Select
的结果CREATE OR REPLACE PROCEDURE CENTER_FROM_LOCATION(LOC_OID IN NUMBER, LOC_CENTER OUT SYS_REFCURSOR) AS
BEGIN
OPEN LOC_CENTER FOR
SELECT * FROM (
.....
)WHERE ROWNUM = 1;
END;
我的C#代码
public ObjectResult<TYPE_IN_MODEL> CENTER_FROM_LOCATION(decimal LocationOID)
{
var Parameter_LocationOID = new ObjectParameter("LOC_OID", LocationOID);
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<TYPE_IN_MODEL>("CENTER_FROM_LOCATION", Parameter_LocationOID);
}
第一个奇怪的是,如果我将参数设置为Int32并且在模型中将属性OID定义为Int32,则它会给我一个异常。使用十进制工作但由于参数数量而引发异常。
System.Data.Entity.Core.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> Oracle.ManagedDataAccess.Client.OracleException: ORA-06550: línea 1, columna 8:
PLS-00306: número o tipos de argumentos erróneos al llamar a 'CENTER_FROM_LOCATION'
ORA-06550: línea 1, columna 8:
PL/SQL: Statement ignored
...
任何人都可以向我展示Oracle中一个存储过程的示例,以获取某些选择的结果,然后使用EF6映射CodeFirst中的存储过程。