2010-04-28 65 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