Oracle存储过程与.Net的ORM样式映射
我正在寻找某种工具来帮助从.Net代码调用Oracle存储过程。我们有一个很大的遗留数据库,坦率地说有点混乱(没有id字段、大的组合键和重复数据)。目前,我们必须通过一个旧的、有缺陷的自定义库通过存储过程进行所有数据访问,我想替换它 我对像nHibernate这样的ORM工具有一些经验,但在我们的环境中使用它一点之后,它似乎并不是处理像这样的遗留数据库的最佳选择 是否有人知道一个好的工具,可以轻松调用存储过程并将结果映射到对象集/集合中?一个很好的好处是处理连接事务的能力Oracle存储过程与.Net的ORM样式映射,.net,database,oracle,orm,.net,Database,Oracle,Orm,我正在寻找某种工具来帮助从.Net代码调用Oracle存储过程。我们有一个很大的遗留数据库,坦率地说有点混乱(没有id字段、大的组合键和重复数据)。目前,我们必须通过一个旧的、有缺陷的自定义库通过存储过程进行所有数据访问,我想替换它 我对像nHibernate这样的ORM工具有一些经验,但在我们的环境中使用它一点之后,它似乎并不是处理像这样的遗留数据库的最佳选择 是否有人知道一个好的工具,可以轻松调用存储过程并将结果映射到对象集/集合中?一个很好的好处是处理连接事务的能力 如果商业图书馆是一个选
如果商业图书馆是一个选择,那就谢谢你了,我们真的很喜欢Devart(见)。。。它们支持LINQ、PLINQ和EF以及存储过程、REF游标等—从Oracle 7.3到11g/.NET 2和更高版本的/32+64位
没有附属关系,只是一个快乐的客户…如果商业图书馆是一个选择,我们真的很高兴与德瓦特(见)。。。它们支持LINQ、PLINQ和EF以及存储过程、REF游标等—从Oracle 7.3到11g/.NET 2和更高版本的/32+64位
没有附属关系,只是一个快乐的客户…新的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>
新的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>
如果您只想使用参数化和物化(将数据转化为对象)进行存储过程处理,那么它简单、极简,应该可以在Oracle上正常工作;例如:
var user = cnn.Query<User>("spGetUser", new {Id = 1},
commandType: CommandType.StoredProcedure).First();
var user=cnn.Query(“spGetUser”,new{Id=1},
commandType:commandType.StoredProcess.First();
要点:
是存储过程的名称spGetUser
- 它作为存储过程通过
commandType
- 参数是从传入的对象推导出来的;在这种情况下,假设有一个名为
的参数,该参数接受一个整数,并传入值Id
1
- 应用直接列到属性映射,为返回的每一行构造一个
对象User
- 在本例中,我们还使用LINQ to对象来演示如何简单地读取一行
请注意,还支持映射多个数据网格和水平分区(到相关图形中的不同对象中)。如果您只想使用参数化和物化(数据到对象中)进行存储过程处理,则该方法简单、最简单,应能在Oracle上正常工作;例如:
var user = cnn.Query<User>("spGetUser", new {Id = 1},
commandType: CommandType.StoredProcedure).First();
var user=cnn.Query(“spGetUser”,new{Id=1},
commandType:commandType.StoredProcess.First();
要点:
是存储过程的名称spGetUser
- 它作为存储过程通过
commandType
- 参数是从传入的对象推导出来的;在这种情况下,假设有一个名为
的参数,该参数接受一个整数,并传入值Id
1
- 应用直接列到属性映射,为返回的每一行构造一个
对象User
- 在本例中,我们还使用LINQ to对象来演示如何简单地读取一行
请注意,还支持映射多个数据网格和水平分区(到相关图形中的不同对象中)。对于那些试图使用Oracle实现实体框架功能导入的用户,您可以使用以下演练: 我还写了一篇杂志文章,其中包括一个演练: 注意:在发布此帖子时,由于beta3中的app.config关键字发生了一些更改,这些Walkthough不起作用。请参阅beta3的ODP.NET目录中的自述文件 已更改的影响漫游的关键字可以修改如下: 本机数据类型到本机数据类型 及 PROVIDER_DB_TYPE到PROVIDERDBTYPE 请参阅ODT目录中的自述文件,以了解有关此问题的其他注意事项。在(将来的)生产版本中(发布本文时不可用),OracleDeveloperToolsforVisualStudioOnline帮助有一个名为“使用实体框架”的部分。本节包含有关映射到存储过程和函数的注意事项。请阅读此文档 有关此app.config元数据格式的更多信息,请参阅“隐式引用游标绑定支持”se中的ODP.NET联机帮助