我想知道如何从实体框架向存储过程发送参数?提前感谢。
第一个问题是:使用哪个版本的Entity Framework?.NET 3.5?.NET 4?在.NET 4中,情况发生了显著的变化(并得到了改进!)。
其次:你想做什么:
从数据库检索行
执行没有返回值的存储过程
将对实体的INSERT / UPDATE / DELETE操作映射到存储过程?
这些是三种非常不同的情况 - 所以我们需要知道你要做什么。
此外:只需使用Google(或Bing)进行搜索 - 有很多博客文章和教程可以向您展示如何做到这一点 - 快速列表:
还有成千上万个......
更新:好的,所以你想从数据库检索数据。在这种情况下,您需要执行以下步骤:
从数据库更新模型
Model Browser
(看到上面的上下文菜单了吗?它就在Update Model from Database
正下方),导航到存储模型并找到您的存储过程Add Function Import
来将“函数”(存储过程)从物理存储模型导入到概念模型中(即您的实体上下文类)。在这里,你有四个选择:
Customer
实体 - 在这种情况下,选择最后一个选项并选择要映射到的实体(在这种情况下,你的存储过程必须返回该实体的所有列)或者:
无论你选择哪种方式 - 基本上EF将在你的对象上下文类中创建一个方法,你可以调用该方法。你的存储过程需要的任何参数都将成为该方法的参数,因此你可以非常容易地传递例如字符串、整数等。
另一种情况是需要调用具有多个输出参数的存储过程。以下是一个完整的示例。
public void MyStoredProc(int inputValue, out decimal outputValue1, out decimal outputValue2)
{
var parameters = new[] {
new SqlParameter("@0", inputValue),
new SqlParameter("@1", SqlDbType.Decimal) { Direction = ParameterDirection.Output },
new SqlParameter("@2", SqlDbType.Decimal) { Direction = ParameterDirection.Output }
};
context.ExecuteStoreCommand("exec MyStoredProc @InParamName=@0, @OutParamName1=@1 output, @OutParamName2=@2 output", parameters);
outputValue1 = (decimal)parameters[1].Value;
outputValue2 = (decimal)parameters[2].Value;
}
SqlDbType.XXX
。