2010-04-28 66 views
3

我在我的项目中使用nHibernate,但我有一个存储过程,它只是返回一个成功或现在的成功。如何从存储过程中使用nhibernate返回一点

如何在c#中编写此代码?

我试过以下,但它不像因为我没有映射布尔!

{"No persister for: System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"}

IQuery query = NHibernateSession.CreateSQLQuery("EXEC MyDatabase.dbo.[ContentProvider_Import] :ContentProviderImportLogId", "success", typeof(bool)) 
       .SetInt32("ContentProviderImportLogId", log.Id); 

      var test = query.UniqueResult<bool>(); 

IQuery query = NHibernateSession.CreateSQLQuery("EXEC MyDatabase.dbo.[ContentProvider_Import] :ContentProviderImportLogId") 
       .AddEntity(typeof(bool)) 
       .SetInt32("ContentProviderImportLogId", log.Id); 

      var test = query.UniqueResult<bool>(); 
+0

你得到了什么,如果你尝试query.UniqueResult()? – 2010-04-28 17:50:40

+0

我不知道hibernate是否足够确定,但指定一个可为null的布尔('bool?','Nullable '或'NHibernateUtil.Boolean')可能会有效。另外,请注意,您可以编辑问题标题 - 您不必创建一个全新的问题:单击问题标签下方的“编辑”链接。 – 2010-04-28 17:56:43

+0

克劳迪奥 - 它没有得到那么远的异常抛出说上述错误,或者如果我尝试没有布尔声明,我得到一个不返回类型定义的异常 – 2010-04-28 18:01:28

回答

5

我会在一个稍微不同的方式,希望这将作为你的解决方法已经解决了这个问题,同样的结果。

我会改变我的存储过程返回一个布尔值如下:

declare @result bit 
set @result = 1 

select @result 

然后将C#代码将是:

IQuery query = NHibernateSession.CreateSQLQuery("EXEC MyDatabase.dbo.[ContentProvider_Import] :ContentProviderImportLogId") 
       .SetInt32("ContentProviderImportLogId", log.Id); 

var test = query.UniqueResult<bool>(); 
+0

谢谢s1mm0t,但那正是我的'已经尝试过,我只是得到一个错误,说我还没有宣布返回类型 – 2010-04-28 18:00:17

+0

不知道你的问题是什么。在我发布我的答案之前,我尝试了这一点,它运行良好。我正在运行NHibernate的2.1.2.4000版本,你使用的是旧版本吗?另外,从你调用SP的方式来看,如果你不使用SQLServer,这是我测试过的(2008),那么这可能是它不工作的另一个原因。 – s1mm0t 2010-04-28 18:13:23

+0

我会复制并粘贴以确保..... – 2010-04-28 18:16:20