没有指定名称的输出参数

时间:2018-11-21 18:04:50

标签: c# .net entity-framework stored-procedures

我正在使用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,而无需指定参数名称?

0 个答案:

没有答案