0

我正在做一个迁移项目,我正在将一个 Web 表单应用程序迁移到一个 ASP.NET MVC 4 应用程序。

我遇到了这种情况,我需要一点帮助。

在旧的网络表单项目中,我存储了类似...

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结果集不同。

现在我想使用实体框架来执行这个存储过程,所以我导入了函数并使用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 回答