Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# (使用Visual Studio 2013)如何使用实体框架调用oracle包内的存储过程?_C#_Oracle_Entity Framework - Fatal编程技术网

C# (使用Visual Studio 2013)如何使用实体框架调用oracle包内的存储过程?

C# (使用Visual Studio 2013)如何使用实体框架调用oracle包内的存储过程?,c#,oracle,entity-framework,C#,Oracle,Entity Framework,我曾尝试添加oracle过程,该过程使用带有ADO.NET实体数据模型的EF5放在包中,但没有导入任何内容。我看不到任何程序 我正在使用ODAC 12c第3版->Oracle数据提供 我可以导入在包外部创建的过程 我们的开发标准是使用oracle软件包来定义过程。我现在使用实体框架从VS2008迁移到VS2013 请提出建议并提供可能的解决方案以克服此问题。非常感谢。以下是我在最近的一个项目中如何做类似的事情。请注意,我使用DevArt而不是ODAC,但也许您会在这里找到一些灵感来解决您的问题

我曾尝试添加oracle过程,该过程使用带有ADO.NET实体数据模型的EF5放在包中,但没有导入任何内容。我看不到任何程序

我正在使用ODAC 12c第3版->Oracle数据提供

我可以导入在包外部创建的过程

我们的开发标准是使用oracle软件包来定义过程。我现在使用实体框架从VS2008迁移到VS2013


请提出建议并提供可能的解决方案以克服此问题。非常感谢。

以下是我在最近的一个项目中如何做类似的事情。请注意,我使用DevArt而不是ODAC,但也许您会在这里找到一些灵感来解决您的问题

我首先创建了一个类,其中包含函数所需的所有参数:

public class MyFunctionParameter
{
    public DateTime? MyDateTime { get; set; }

    public string Source { get; set; }
}
此类还包含一个ToOracleParameters方法。请注意:

在我的方法中,我使用了这样的类:

var parameters = parameter.ToOracleParameters();
var inParameterList = string.Join(", ", 
    parameters.Where(x => x.Direction == ParameterDirection.Input)
        .Select(x => ":" + x.ParameterName));
var outParameter = parameters.Single(x => x.Direction == ParameterDirection.Output);
var sql = string.Format("BEGIN :{0} := MY_ORACLE_FUNCTION({1}); end;", 
    outParameter.ParameterName, inParameterList);

DbContext.Database.SqlQuery<object>(sql, parameters.Cast<object>().ToArray()).SingleOrDefault();

尝试执行以下操作:

在服务器资源管理器->数据连接中,您将看到为生成模型而建立的连接。您可以从那里修改连接。有一个名为“过滤器”的选项卡,从中可以设置许多可以看到的对象。例如,您可以获取公共同义词和显示的集合包、视图、表等

我不是Oracle专家,但是,您能为包中的过程创建一个公共同义词吗?也许会有用

如果您找不到解决方案,您可以到这里:

一些为Oracle开发实体框架的人可能会帮助您

希望能有帮助

问候

var parameters = parameter.ToOracleParameters();
var inParameterList = string.Join(", ", 
    parameters.Where(x => x.Direction == ParameterDirection.Input)
        .Select(x => ":" + x.ParameterName));
var outParameter = parameters.Single(x => x.Direction == ParameterDirection.Output);
var sql = string.Format("BEGIN :{0} := MY_ORACLE_FUNCTION({1}); end;", 
    outParameter.ParameterName, inParameterList);

DbContext.Database.SqlQuery<object>(sql, parameters.Cast<object>().ToArray()).SingleOrDefault();