我正在开发一个迁移项目,我将Web表单应用程序迁移到ASP.NET MVC 4应用程序。
我遇到过这种情况,我需要一些帮助。
在旧的Web表单项目中,我存储了proc ... ...
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框架来执行这个存储过程,所以我导入了该函数并使用EF提供的Get Column Information
+ Create Complex Type
选项创建了一个复杂类型。
现在它在我输入执行SELECT * FROM Electronics WHERE name = @input
的有效@input时运行但是当我输入一个不存在的输入而不是返回101错误代码时它会给我一个错误。抛出异常。
异常详情
数据阅读器与指定的'testEFModel.GetTestResults_Result1'不兼容。类型为“id”的成员在数据读取器中没有相应的具有相同名称的列。
我该如何解决这个问题?
答案 0 :(得分: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方式做事的想法