Entity framework 具有odp.net托管驱动程序的实体框架的函数导入
我最近从ODP非托管切换到ODP托管(与实体框架结合使用)。 在web.config部分添加了必要的信息后,非托管驱动程序工作正常。我可以使用函数Import-Get Column information添加存储过程并生成复杂类型(我正在尝试导入带有OUT refcursor参数的存储过程)。 切换之后,config部分被更新以反映新的格式,并且所有内容都在运行时工作(因此格式是正确的) 但是,当我再次尝试生成复杂类型(或添加新的函数导入)时,我只得到一条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
System.notSupportedException消息:此选择器不支持指定的类型)
,但没有任何指示它是哪种类型/选择器(显然)
谷歌什么也没找到,甲骨文论坛上的帖子也没有得到回应
版本:
ODP.Net(ODAC):v12.1(生产版本;DLL v4.121.1.0)
EFV5
.NETV4.5
配置文件(稍微修剪):
有两件事您可能想尝试,这可能会解决问题:
int32
providerType映射到
number(10,0)
nativeDataType,由edmmapping强制执行,而不是
您当前拥有的十进制数。另一种情况也是如此
列(如删除列长度),直到看不到错误或得到不同的错误为止您可能想尝试两件事来解决这个问题:
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