2013-01-02 18 views
1

我有一個存儲過程,只是返回記錄的總數除以任何值傳入。這是爲了幫助在網站上分頁。爲什麼實體框架調用我的存儲過程但返回的值不正確?

但是,我正在使用實體框架綁定到該存儲過程,並且它將返回所有對它的調用-1。當我使用SQL Management Studio詢問存儲過程時,它會返回正確的值。

我的存儲過程是這樣的:

CREATE PROCEDURE [dbo].[GetAuditRecordPageCount] 
@Count INTEGER 
AS 
RETURN ((SELECT COUNT(Id) FROM AuditRecords)/@Count) + 1 

而我在C#中的實體框架調用是這樣的:

int pageCount; 
using (Entities entities = new Entities()) 
{ 
    pageCount = entities.GetAuditRecordPageCount(count); 
} 

我是正確的編寫C#代碼這種方式?

按要求在評論,由EF生成的SQL是:

exec [dbo].[GetAuditRecordPageCount] @Count=100 
+0

你的GetAuditRecordPageCount方法是什麼? – IronMan84

+0

您是否可以使用SQL Profiler查看EF生成的SQL? – DaveShaw

+0

@ IronMan84這只是EF自動生成的代碼。 –

回答

3

你有沒有試過? http://www.devtoolshed.com/using-stored-procedures-entity-framework-scalar-return-values

我覺得你的過程將是這樣的:

CREATE PROCEDURE [dbo].[GetAuditRecordPageCount] 
@Count INTEGER 
AS 
declare @retVal int 
set @retVal = ((SELECT COUNT(Id) FROM AuditRecords)/@Count) + 1 
select @retVal 

和C#代碼:

int? pageCount; 
using (Entities entities = new Entities()) 
{ 
    pageCount = entities.GetAuditRecordPageCount(count).SingleOrDefault(); 

    if (pageCount.HasValue) 
    { 
     //do something here 
    } 
    else 
    { 

    } 
} 

不要忘了把 「標量:的Int32」 的編輯功能導入屏幕。

+0

我做了一些非常相似的事情。它運作良好,是「正確的方式」。謝謝。 –

相關問題