0

WebフォームアプリをASP.NETMVC4アプリに移行する移行プロジェクトに取り組んでいます。

私は少し助けが必要なこの1つのシナリオに出くわしました。

古いWebフォームプロジェクトでは、次のようなプロシージャを保存しました...

ALTER PROCEDURE [dbo].[TestMultipleResultSet]
    @input VARCHAR
AS
BEGIN
    SET NOCOUNT ON;

    IF NOT EXISTS
    (
        SELECT * FROM Electronics
        WHERE name = @input
    )
    BEGIN
        SELECT 101 AS errorcode
        RETURN
    END

    SELECT * FROM Electronics 
    WHERE name = @input
END

上記のif not existチェックのように、結果セットとして異なるを与える他の多くのチェックがありますselect * from

ここで、Entity Frameworkを使用してこのストアドプロシージャを実行したいので、関数をインポートし、EFが提供するGet Column Information+オプションを使用して複合型を作成しました。Create Complex Type

これで、実行する有効な@inputを入力すると実行SELECT * FROM Electronics WHERE name = @inputされますが、101エラーコードを返す代わりに存在しない入力を入力すると、エラーが発生します。例外がスローされます。

例外の詳細

データリーダーは、指定された'testEFModel.GetTestResults_Result1'と互換性がありません。タイプ'id'のメンバーには、同じ名前の対応する列がデータリーダーにありません。

これをどのように解決すればよいですか?

4

1 に答える 1

1

ストアドプロシージャを使用する必要が本当にありますか?

EFを使用すると、次のことが簡単にできます。

var filteredItems = dc.Electronics.Where(e => e.Name == @input).ToList();

if (!filteredItems.Any())
    throw new ApplicationException("No items were found according to criteria");

注:私は実際に上記のコードを実行していません。EFの方法で物事を行うというアイデアを示しているだけです

于 2012-11-06T13:56:54.667 に答える