2011-12-19 173 views
1

我想从C#代码中调用存储过程。这是我尝试:如何将参数传递给EF存储过程?

var result = db.ExecuteStoreCommand("TaskSchedule", new object[] { new ObjectParameter("treatmentDateFrom", dateTime)}); 

但是我收到以下错误:

No mapping exists from object type System.Data.Objects.ObjectParameter to a known managed provider native type.

可否请你告诉我我究竟做错了什么?

我见过很多关于从SP中获取值的帖子,但我想将我的参数传递给SP。我正在使用EF4。

感谢您的帮助。

回答

1

访问存储过程槽通过将SP映射到ObjectContext,EF可以变得非常简单。

在您的EDMX设计器中,您可以导入存储过程并将结果映射到新类型或现有类型。在此之后,SP成为对象上下文的强类型函数。

Here is some documentation关于导入SP的。

如果您不想导入SP并使用ExecuteStoreCommand,则需要确保在命令文本中指定了参数,并且它们的类型为SqlParameter,其名称和值正确。

+0

我已经将它添加到EDMX作为导入功能。但是没有办法给它添加任何参数。 EDMX不能看到这个过程采用任何参数,尽管SQL Management Studio的确如此。 我试图手动编辑EDMX,并添加了这些参数。我也刷新了导入功能。现在我可以用以下参数调用这个过程: var result = db.TaskSchedule(DateTime.Now,...); 它编译正确,但是我得到以下错误: 由商店数据提供商返回的数据读取器没有足够的列来查询请求。 – user1089583 2011-12-19 12:19:46

+0

请问http://msdn.microsoft.com/en-us/library/bb896334.aspx有帮助吗? – 2011-12-19 12:28:39

相关问题