2013-06-20 5 views
6

Использование Entity Framework 5 можно использовать хранимый процесс с дополнительными параметрами, так что вам не нужно добавлять нуль для каждого неиспользованного параметра?Entity Framework с дополнительными параметрами?

Сохраненная процедура, которую я должен использовать, имеет 87 параметров, только 2 из которых необходимы. Я действительно ненавижу мысль о том, что нужно положить 85 нулей в каждом вызове.

ответ

7

Вы можете использовать ObjectContext.ExecuteFunction метод (DbContext является оберткой над ObjectContext), чтобы выполнить некоторые хранимую процедуру и передать список параметров:

FooEntities db = new FooEntities(); 
var objectContext = ((IObjectContextAdapter)db).ObjectContext; 
// create all parameters you need 
var name = new ObjectParameter("Name", "Lazy"); 
var age = new ObjectParameter("Age", 29); 

// call stored procedure with these two parameters only 
var result = objectContext.ExecuteFunction<Result>("ProcedureName", name, age); 

Вы можете обернуть этот код в метод расширения для DbContext:

public static Result ProcedureName(this FooEntities db, name, age) 
{ 
    // code above 
} 

Использование будет как: var result = db.ProcedureName("Lazy", 29);

+5

В случае, если кто проверяет этот вопрос и использует Ef6 о выше, вы можете сделать это с помощью dbContext.Database.SqlQuery. Если у вас есть дополнительные параметры, вы можете установить значение DbNull.Value. Вы можете создать для построения SqlParameters, и когда значение равно null, оно устанавливает DbNull.Value. Я надеюсь, что это помогает. –

+0

@FranciscoGoldenstein спасибо! Время идет, все меняется) Я добавлю тег с соответствующей версией EF на вопрос –

+1

спасибо @FranciscoGoldenstein –

1

Я демонстрирую комментарий @Francisco Goldenstein на ответ. Порядок в инструкции «EXEC SP_MySP @One, @Two, @Three, @Four» должен соответствовать параметру вашей хранимой процедуры. Порядок paraOne, paraTwo и т. Д. Не имеет значения.

  public List<MySPEntity> GetMyData(int thirdValue, string firstValue) 
 
     { 
 
       var paraOne = new SqlParameter("@One", firstValue); 
 
       var paraTwo = new SqlParameter("@Two", DBNull.Value); 
 
       var paraThree = new SqlParameter("@Three", thirdValue); 
 
       var paraFour = new SqlParameter("@Four", DBNull.Value); 
 

 
       var result = DataContext.Database.SqlQuery<MySPEntity>("EXEC SP_MySP @One, @Two, @Three, @Four" 
 
       , paraTwo, paraOne, paraFour,paraThree).ToList(); 
 

 
       return result; 
 
      
 
     }

Смежные вопросы