Я использую Entity Framework 6.2.0.Чтобы выполнить хранимую процедуру с выходным параметром в EF, мы должны выполнить после (также на 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()
требует, чтобы параметр output
был инициализирован с фактическим именем параметра SP и передан ему.
Но это не имеет смысла для меня, потому что клиенты context
не должны знать имена фактических выходных параметров SP.Мы не обязаны знать имена входных параметров.Тогда, почему мы должны знать имена выходных?
Более того, после переименования параметра output
в SP и обновления модели 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;
}
Как выполнитьSP с выходным параметром в EF без указания имени параметра?