gpt4 book ai didi

.net - Oracle 存储过程与 .Net 的 ORM 样式映射

转载 作者:搜寻专家 更新时间:2023-10-30 22:03:22 25 4
gpt4 key购买 nike

我正在寻找某种工具来帮助从 .Net 代码调用 Oracle 存储过程。我们有一个大型遗留数据库,坦率地说有点困惑(没有 id 字段、大型复合键和重复数据)。目前,我们必须通过一个陈旧且有问题的自定义库通过存储过程进行所有数据访问,我想替换它。

我对像 nHibernate 这样的 ORM 工具有一些经验,但在我们的环境中试用了一下之后,它似乎并不是处理像这样的遗留数据库的最佳选择。

有谁知道可以轻松调用存储过程并将结果映射到对象集/集合的好工具?一个不错的好处是还能够处理连接事务。

谢谢

最佳答案

新的 Oracle beta Entity Framework 驱动程序可以让您做到这一点。您可以将 SP 映射到模型和实体(如果它们返回相当于一个表)或创建一个“复杂类型”,这是一个围绕 SP 返回的内容构建的类。

我不知道您调用了多少个 SP,但对于我已经尝试过的那些,它已经解决了。

另一种选择是编写您自己的库,它只调用过程并将结果作为 .net 类返回,但这将需要您在重复代码方面进行大量设置工作(将参数映射到 Oracle 中的过程需要乏味真正快)。

编辑 - 这是一个使用存储过程的配置文件条目,其中结果来自作为 OUT 参数的游标。

  <oracle.dataaccess.client>
<settings>
<add name="ENVMSTR.P_ORG_UNIT_R_BY_STAFF.RefCursor.RESULT_CURSOR_P" value="implicitRefCursor bindinfo='mode=Output'" />
</settings>
</oracle.dataaccess.client>

编辑 2 - 以及有问题的存储过程:

create or replace
PROCEDURE P_ORG_UNIT_R_BY_STAFF
(
STAFF_ID_P IN NUMBER
, RESULT_CURSOR_P OUT SYS_REFCURSOR
) AS
BEGIN
OPEN RESULT_CURSOR_P FOR
select *
from dept_organizational_unit
start with deptorgunit_cd = (select deptorgunit_cd from staff where staff_id = STAFF_ID_P)
connect by prior deptorgunit_parent_cd = deptorgunit_cd;
END P_ORG_UNIT_R_BY_STAFF;

关于.net - Oracle 存储过程与 .Net 的 ORM 样式映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7182907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com