2013-06-20 29 views
6

Utilizzo di Entity Framework 5 è possibile utilizzare un proc memorizzato con parametri facoltativi in ​​modo tale da non dover aggiungere un valore null per ogni parametro non utilizzato?Entity Framework con parametri facoltativi?

Il proc memorizzato che devo utilizzare ha 87 parametri solo 2 dei quali sono obbligatori. Odio davvero l'idea di dover inserire 85 null in ogni chiamata.

risposta

7

È possibile utilizzare ObjectContext.ExecuteFunction metodo (DbContext è un wrapper sopra ObjectContext) per eseguire alcune stored procedure e passare elenco dei parametri:

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); 

Puoi avvolgere questo codice in metodo di estensione per il vostro DbContext:

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

Uso sarà come: var result = db.ProcedureName("Lazy", 29);

+5

Nel caso in cui qualcuno controlli la questione e sta usando EF6 o superiore, è possibile farlo utilizzando dbContext.Database.SqlQuery. Se disponi di parametri opzionali, puoi impostare il valore su DbNull.Value. È possibile creare per la costruzione di SqlParameters e quando il valore è null, imposta DbNull.Value. Spero possa essere d'aiuto. –

+0

@FranciscoGoldenstein grazie! Il tempo scorre, tutto cambia) Aggiungerò il tag con la versione EF appropriata alla domanda –

+1

grazie a @FranciscoGoldenstein –

1

Sto dimostrando @Francisco Goldenstein commento sulla risposta. L'ordine nell'istruzione "EXEC SP_MySP @One, @Two, @Three, @Four" deve corrispondere al parametro della stored procedure. L'ordine di paraOne, paraTwo, ecc. Non ha importanza.

  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; 
 
      
 
     }

Problemi correlati