Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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/6/ant/2.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
Entity framework 具有odp.net托管驱动程序的实体框架的函数导入_Entity Framework_Odp.net - Fatal编程技术网

Entity framework 具有odp.net托管驱动程序的实体框架的函数导入

Entity framework 具有odp.net托管驱动程序的实体框架的函数导入,entity-framework,odp.net,Entity Framework,Odp.net,我最近从ODP非托管切换到ODP托管(与实体框架结合使用)。 在web.config部分添加了必要的信息后,非托管驱动程序工作正常。我可以使用函数Import-Get Column information添加存储过程并生成复杂类型(我正在尝试导入带有OUT refcursor参数的存储过程)。 切换之后,config部分被更新以反映新的格式,并且所有内容都在运行时工作(因此格式是正确的) 但是,当我再次尝试生成复杂类型(或添加新的函数导入)时,我只得到一条System.notSupportedE

我最近从ODP非托管切换到ODP托管(与实体框架结合使用)。 在web.config部分添加了必要的信息后,非托管驱动程序工作正常。我可以使用函数Import-Get Column information添加存储过程并生成复杂类型(我正在尝试导入带有OUT refcursor参数的存储过程)。 切换之后,config部分被更新以反映新的格式,并且所有内容都在运行时工作(因此格式是正确的)

但是,当我再次尝试生成复杂类型(或添加新的函数导入)时,我只得到一条
System.notSupportedException消息:此选择器不支持指定的类型)
,但没有任何指示它是哪种类型/选择器(显然)

谷歌什么也没找到,甲骨文论坛上的帖子也没有得到回应

版本: ODP.Net(ODAC):v12.1(生产版本;DLL v4.121.1.0) EFV5 .NETV4.5 配置文件(稍微修剪):


有两件事您可能想尝试,这可能会解决问题:

  • 确保架构名称、存储过程名称和 配置中的列名与Oracle中的列名相同
  • 尝试将本机类型映射到更一致的提供程序类型,如 第一列COL1-将
    int32
    providerType映射到
    number(10,0)
    nativeDataType,由edmmapping强制执行,而不是 您当前拥有的十进制数。另一种情况也是如此 列(如删除列长度),直到看不到错误或得到不同的错误为止

  • 您可能想尝试两件事来解决这个问题:

  • 确保架构名称、存储过程名称和 配置中的列名与Oracle中的列名相同
  • 尝试将本机类型映射到更一致的提供程序类型,如 第一列COL1-将
    int32
    providerType映射到
    number(10,0)
    nativeDataType,由edmmapping强制执行,而不是 您当前拥有的十进制数。另一种情况也是如此 列(如删除列长度),直到看不到错误或得到不同的错误为止

  • 非托管ODP.NET和托管ODP.NET之间的隐式引用游标配置文件格式不同。这可能是你问题的一部分

    为了避免麻烦,请安装最新的Oracle Developer Tools for Visual Studio(ODT),并使用自动生成此配置的新功能:

    1) 如果尚未安装ODT 12.1,请安装

    2) 在服务器资源管理器中找到存储过程,右键单击并运行它,然后输入输入参数

    3) 对于表示实体函数返回值的输出参考光标,请选中“添加到配置”复选框

    4) 然后选择“显示配置”(然后剪切并粘贴)或“添加到配置”

    下面是我所说内容的屏幕截图:

    如果这还不能解决问题,那就试试布尔映射。在撰写本文时,我并不是100%确定这一点,但我记得听说对布尔值的支持是托管ODP.NET和非托管ODP.NET之间的另一个区别。我肯定它埋在发行说明或文档的某个地方

    克里斯蒂安·谢伊


    Oracle

    非托管ODP.NET和托管ODP.NET之间的隐式引用游标配置文件格式不同。这可能是你问题的一部分

    为了避免麻烦,请安装最新的Oracle Developer Tools for Visual Studio(ODT),并使用自动生成此配置的新功能:

    1) 如果尚未安装ODT 12.1,请安装

    2) 在服务器资源管理器中找到存储过程,右键单击并运行它,然后输入输入参数

    3) 对于表示实体函数返回值的输出参考光标,请选中“添加到配置”复选框

    4) 然后选择“显示配置”(然后剪切并粘贴)或“添加到配置”

    下面是我所说内容的屏幕截图:

    如果这还不能解决问题,那就试试布尔映射。在撰写本文时,我并不是100%确定这一点,但我记得听说对布尔值的支持是托管ODP.NET和非托管ODP.NET之间的另一个区别。我肯定它埋在发行说明或文档的某个地方

    克里斯蒂安·谢伊


    Oracle

    我也有同样的错误,我认为我的问题是提供程序类型为DOUBLE或DECIMAL。但是,我有一个工作,有你的3列类型。您的问题是数字(10,0)应该是“Int64”的providerType

    存储过程:

    create or replace PROCEDURE "PROC_ESCC_FIELDS" (p_recordset OUT SYS_REFCURSOR)
    AS
    BEGIN
    OPEN p_recordset FOR
      SELECT COL1, COL2, COL3
         FROM MyTable;
    END PROC_ESCC_FIELDS;
    
    这将工作并返回光标:

    <oracle.manageddataaccess.client>
      <version number="*">
        <implicitRefCursor>
          <storedProcedure schema="SERFIS" name="PROC_V_SERFIS_ESCC_FIELDS">
            <refCursor name="P_RECORDSET">
              <bindInfo mode="Output" />
                <metadata columnOrdinal="0" columnName="COL1" providerType="Int64" allowDBNull="false" nativeDataType="Number" />
                <metadata columnOrdinal="1" columnName="COL2" providerType="Date" allowDBNull="true" nativeDataType="Date" />
                <metadata columnOrdinal="2" columnName="COL3" providerType="Varchar2" allowDBNull="false" nativeDataType="Varchar2" />
            </refCursor>
          </storedProcedure>
        </implicitRefCursor>
      </version>
    </oracle.manageddataaccess.client>
    
    
    

    我也有同样的错误,我认为我的问题是提供程序类型为DOUBLE或DECIMAL。但是,我有一个工作,有你的3列类型。您的问题是数字(10,0)应该是“Int64”的providerType

    存储过程:

    create or replace PROCEDURE "PROC_ESCC_FIELDS" (p_recordset OUT SYS_REFCURSOR)
    AS
    BEGIN
    OPEN p_recordset FOR
      SELECT COL1, COL2, COL3
         FROM MyTable;
    END PROC_ESCC_FIELDS;
    
    这将工作并返回光标:

    <oracle.manageddataaccess.client>
      <version number="*">
        <implicitRefCursor>
          <storedProcedure schema="SERFIS" name="PROC_V_SERFIS_ESCC_FIELDS">
            <refCursor name="P_RECORDSET">
              <bindInfo mode="Output" />
                <metadata columnOrdinal="0" columnName="COL1" providerType="Int64" allowDBNull="false" nativeDataType="Number" />
                <metadata columnOrdinal="1" columnName="COL2" providerType="Date" allowDBNull="true" nativeDataType="Date" />
                <metadata columnOrdinal="2" columnName="COL3" providerType="Varchar2" allowDBNull="false" nativeDataType="Varchar2" />
            </refCursor>
          </storedProcedure>
        </implicitRefCursor>
      </version>
    </oracle.manageddataaccess.client>
    
    
    

    这对我很有效。一个有趣的细节:当我第一次生成映射时,它不起作用。但是当我刚把它们剪下来(从web.config中),保存了文件,然后又把它们粘贴回来时,突然一切都好了。我们花了15分钟…我注意到您必须显式地保存c