我正在使用Entity Framework 6.2.0。要在EF中执行带有输出参数的存储过程,我们必须执行following(同样在SO上):
// Create a ObjectParameter instance to retrieve output parameter from stored procedure
ObjectParameter output = new ObjectParameter("ID", typeof(Int32));
context.InsertPerson(name, description, output);
典型的自动生成的InsertPerson()
方法如下:
public virtual int InsertPerson(string name, string description, ObjectParameter output)
{
var nameParameter = new ObjectParameter("name", name);
var descriptionParameter = new ObjectParameter("description", description);
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("InsertPerson", nameParameter , descriptionParameter , output);
}
因此,InsertPerson()
方法要求使用实际的SP参数名称初始化output
参数,并将其传递给它。
但这对我来说没有意义,因为context
的客户不应该知道实际SP输出参数的名称。我们不需要知道输入参数名称。那么,为什么我们必须知道输出名称呢?
此外,在SP中重命名output
参数并从数据库更新EF模型之后,我们既没有相应地自动更新我们的代码,也没有知道我们的代码是好的方法(编译器错误)。与数据库架构不同步。
为什么没有这样生成方法:
public virtual int InsertPerson(string name, string description, out int output)
{
var nameParameter = new ObjectParameter("name", name);
var descriptionParameter = new ObjectParameter("description", description);
var outputParameter = new ObjectParameter("ID", typeof(Int32));
var result = ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("InsertPerson", nameParameter , descriptionParameter , outputParameter);
output = outputParameter.Value;
return result;
}
如何在EF中使用输出参数执行SP,而无需指定参数名称?