首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以前没有人使用过Nhibernate和oracle存储过程吗?

以前没有人使用过Nhibernate和oracle存储过程吗?
EN

Stack Overflow用户
提问于 2010-02-05 00:56:30
回答 2查看 1K关注 0票数 0

我一直在发同样的问题,但是没有人回答。这是第一次发生这种情况。如果有人能帮我的话,请帮帮我。

问题:

我已经将我的数据库表从NHibernate映射到C#类。但是我需要使用一些参数调用一个存储过程。但是NHibernate使用它自己的愿望调用存储过程!(即,NHibernate维护存储过程参数的顺序)。现在我的问题是,我如何知道参数序列的顺序?

在VS 2008 SP1、Oracle和NHibernate 1.2版本中,Iam将ASP.Net与C#配合使用

代码:

代码语言:javascript
复制
<sql-insert>
  call strored_proc(?,?,?,?,?,?,?,?)
</sql-insert>
EN

回答 2

Stack Overflow用户

发布于 2010-02-05 03:31:54

15.3. Custom SQL for create, update and delete

位置参数的顺序当前至关重要,因为它们的顺序必须与NHibernate期望的顺序相同。

您可以通过启用NHibernate.Persister.Entity级别的调试日志记录来查看预期的顺序。启用此级别后,NHibernate将打印出用于创建、更新、删除等实体的静态SQL。(要查看预期的序列,请记住不要在映射文件中包含您的自定义SQL,因为这将覆盖NHibernate生成的静态sql。)

我猜它的顺序与属性映射的顺序相同?

票数 0
EN

Stack Overflow用户

发布于 2010-02-05 06:39:45

你可以像这样做。

代码语言:javascript
复制
session.CreateSQLQuery("call strored_proc(:a, :b, :c, :d)")
            .SetInt64("a", 54)
            .SetInt64("b", 544)
            .SetString("c", "your value")
            .SetInt64("d", 6546546)
            .ExecuteUpdate();

其中a,b,c,d是函数的参数。

对它调用.List()以返回一个二维对象数组。

如果想要进行映射:

代码语言:javascript
复制
<sql-query name="StoredProcName">
 call strored_proc(:a, :b, :c, :d)
</sql-query>

然后在您的C#代码中

代码语言:javascript
复制
session.GetNamedQuery("StoredProcName")
            .SetInt64("a", 54)
            .SetInt64("b", 544)
            .SetString("c", "your value")
            .SetInt64("d", 6546546)
            .ExecuteUpdate();

或者,如果您需要结果而不是.ExecuteUpdate();,请再次调用.List();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2201530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档