1

渡された値で割ったレコードの総数を単純に返すストアド プロシージャがあります。これは、Web サイトのページネーションを支援するためです。

ただし、エンティティ フレームワークを使用してそのストアド プロシージャにバインドしています-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
4

1 に答える 1

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
   {

   }
}

編集機能のインポート画面に「Scalars: Int32」を入れるのを忘れずに。

于 2013-01-03T00:08:11.457 に答える