我已成功通过“从数据库更新模型”向导添加我的存储过程。对于不需要任何输入参数的存储过程,我可以轻松地检索复杂查询。
但是,我无法返回需要输入参数的存储过程的结果。我尝试在C#类中传递它并将其存储在“result”中,如下所示:
//20 is the value I am passing into my stored procedure
IEnumerable<MyClass> result = _db.MyStoredProcedure(20).Select(x => new MyClass(){....});
return result;
但我无法检索结果,因为'int'不包含'Select'的定义。
我相信这是因为我需要在模型浏览器中的复杂类型中实际拥有结果类型。我可以创建自定义的,但是,我无法将存储过程的返回值转换为这些值,因为我无法设置该参数。
我在存储过程中注意到它有一个需要在Database.Store位置下的“Stored Procedures / Functions”文件夹中初始化的变量。有什么方法可以设置为我想传递的价值吗? (我在模型浏览器中检查了该特定ID的属性)
或者,也许我正在以错误的方式思考这个问题。
任何帮助都会很棒。
提前致谢。
答案 0 :(得分:0)
我对这个问题的解决方案很简单。
因此传递参数可以正常工作。我实际上应该在我的问题中将20传递给前面提到的例子。问题在于存储过程本身。
因为ADO没有内置的方法来设置/传递参数,所以您需要手动修改SQL查询,以执行存储过程应该执行的操作。所以我修改了我的存储过程,使用
打印出它应该执行的内容print result
然后从“消息”中复制并粘贴存储过程的结果(所以我选择了我通常会传递的参数)。然后我在模型浏览器中重新编辑函数导入,然后点击“获取列信息”并获得我特别想要的复杂结果类型。
有效!