我一直在发同样的问题,但是没有人回答。这是第一次发生这种情况。如果有人能帮我的话,请帮帮我。
问题:
我已经将我的数据库表从NHibernate映射到C#类。但是我需要使用一些参数调用一个存储过程。但是NHibernate使用它自己的愿望调用存储过程!(即,NHibernate维护存储过程参数的顺序)。现在我的问题是,我如何知道参数序列的顺序?
在VS 2008 SP1、Oracle和NHibernate 1.2版本中,Iam将ASP.Net与C#配合使用
代码:
<sql-insert>
call strored_proc(?,?,?,?,?,?,?,?)
</sql-insert>发布于 2010-02-05 03:31:54
15.3. Custom SQL for create, update and delete
位置参数的顺序当前至关重要,因为它们的顺序必须与NHibernate期望的顺序相同。
您可以通过启用NHibernate.Persister.Entity级别的调试日志记录来查看预期的顺序。启用此级别后,NHibernate将打印出用于创建、更新、删除等实体的静态SQL。(要查看预期的序列,请记住不要在映射文件中包含您的自定义SQL,因为这将覆盖NHibernate生成的静态sql。)
我猜它的顺序与属性映射的顺序相同?
发布于 2010-02-05 06:39:45
你可以像这样做。
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()以返回一个二维对象数组。
如果想要进行映射:
<sql-query name="StoredProcName">
call strored_proc(:a, :b, :c, :d)
</sql-query>然后在您的C#代码中
session.GetNamedQuery("StoredProcName")
.SetInt64("a", 54)
.SetInt64("b", 544)
.SetString("c", "your value")
.SetInt64("d", 6546546)
.ExecuteUpdate();或者,如果您需要结果而不是.ExecuteUpdate();,请再次调用.List();
https://stackoverflow.com/questions/2201530
复制相似问题