Entity framework 如何使用Entity Framework从Oracle 11g Express数据库调用存储过程

Entity framework 如何使用Entity Framework从Oracle 11g Express数据库调用存储过程,entity-framework,asp.net-mvc-4,visual-studio-2012,oracle11g,Entity Framework,Asp.net Mvc 4,Visual Studio 2012,Oracle11g,我知道这个问题被问了很多次,我搜索了很多,没有找到一个解决方案 我使用的是Visual Studio 2012、实体框架6.1.3、.NET 4.5、ASP.NET MVC 4-应用程序。数据库和VS2012连接正常,我可以使用ADO.NET实体数据模型.edmx与数据库进行完美的交互 我有一个简单的表类别。此表有两列CATEGORY\u ID和CATEGORY\u NAME。这些行是: CATEGORY_ID CATEGORY_NAME -----------------------

我知道这个问题被问了很多次,我搜索了很多,没有找到一个解决方案

我使用的是Visual Studio 2012、实体框架6.1.3、.NET 4.5、ASP.NET MVC 4-应用程序。数据库和VS2012连接正常,我可以使用ADO.NET实体数据模型
.edmx
与数据库进行完美的交互

我有一个简单的表
类别
。此表有两列
CATEGORY\u ID
CATEGORY\u NAME
。这些行是:

CATEGORY_ID      CATEGORY_NAME
----------------------------------
    1            SELECT A CATEGORY
    2            Grocery
    3            Cosmetics
    4            Clothing
    5            Stationary
    6            Electronics
    7            Sweets
请给我:

  • Oracle数据库代码示例,用于创建此
    类别
    表的过程或函数
  • 从过程或函数中获取行的实体框架代码示例

  • 好的,经过4个小时不休息的连续尝试,我找到了解决方案。 我在Oracle数据库中有这样一个表:

    using (OracleConnection objConn = new OracleConnection("DATA SOURCE=localhost:1521/XE; PASSWORD=irfan118406; USER ID=IRFAN_OMIDB22"))
            {
                OracleCommand objCmd = new OracleCommand("GET_CAT_NAME", objConn);
                objCmd.CommandType = CommandType.StoredProcedure;
    
                OracleParameter pout_descr = new OracleParameter("id", OracleDbType.Varchar2, 2000);
    
                //objCmd.Parameters.Add(new OracleParameter("id",OracleDbType.Varchar2,ParameterDirection.Input)).Value = 2;
                objCmd.Parameters.Add("cat_id",OracleDbType.Int32).Value = 3;
                objCmd.Parameters.Add("cat_name", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
    
                objCmd.Parameters["cat_name"].Size = 20;
    
                try
                {
                    objConn.Open();
                    objCmd.ExecuteNonQuery();
                    Response.Write(objCmd.Parameters["cat_name"].Value.ToString());
    
                }
                catch (Exception ex)
                {
                    Response.Write(ex.ToString());
                }
    
                objConn.Close();
            }
    
  • 类别\标识类别\名称
  • 1选择一个类别
  • 2杂货店
  • 3化妆品
  • 4服装
  • 5固定的
  • 6电子产品
  • 为此,我有一个程序:

    create or replace PROCEDURE GET_CAT_NAME(cat_id IN number, cat_name OUT 
    varchar2)
    IS
    BEGIN
    SELECT CATEGORY_NAME INTO cat_name 
    FROM CATEGORY WHERE CATEGORY_ID = cat_id;
    END;​
    
    为此,我用C语言编写了如下代码:

    using (OracleConnection objConn = new OracleConnection("DATA SOURCE=localhost:1521/XE; PASSWORD=irfan118406; USER ID=IRFAN_OMIDB22"))
            {
                OracleCommand objCmd = new OracleCommand("GET_CAT_NAME", objConn);
                objCmd.CommandType = CommandType.StoredProcedure;
    
                OracleParameter pout_descr = new OracleParameter("id", OracleDbType.Varchar2, 2000);
    
                //objCmd.Parameters.Add(new OracleParameter("id",OracleDbType.Varchar2,ParameterDirection.Input)).Value = 2;
                objCmd.Parameters.Add("cat_id",OracleDbType.Int32).Value = 3;
                objCmd.Parameters.Add("cat_name", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
    
                objCmd.Parameters["cat_name"].Size = 20;
    
                try
                {
                    objConn.Open();
                    objCmd.ExecuteNonQuery();
                    Response.Write(objCmd.Parameters["cat_name"].Value.ToString());
    
                }
                catch (Exception ex)
                {
                    Response.Write(ex.ToString());
                }
    
                objConn.Close();
            }
    
    代码工作完美,没有任何错误

    更新:

    objCmd.Parameters["cat_name"].Size = 20;
    

    这一行代码非常重要,我连续3个小时收到一个错误:“ORA-06502:PL/SQL:调用存储过程时出现数值或值错误”,放置这一行代码后,错误消失并正常运行。

    很抱歉,列值没有正确显示在这里。所以我再次提供。类别ID:1,2,3,4,5,6类别名称:杂货店,化妆品,服装,文具,电子产品,糖果这不是一个工作原理-这不是一个代码编写服务,你只需抛售你的需求,然后要求代码-我们会帮助-如果你自己尝试了一些东西,你被卡住了(那么请告诉我们到目前为止您尝试了什么,并解释您遇到了什么困难)-但我们不会只为您编写全部代码!