9

Questa potrebbe essere una risposta semplice, ma non riesco a vedere come eseguire una stored procedure con EF CTP5.Entity Framework CTP5 - Come chiamare la stored procedure?

In Entity Framework 4.0, abbiamo fatto questo:

ExecuteFunction("ContainerName.StoredProcName", new ObjectParameter("Id", id)).

Quale è un metodo su ObjectContext.

Ma DbContext non ha un metodo simile.

Come si chiama un proc memorizzato? Non è supportato in EF CTP5?

EDIT:

ho trovato this thread, in cui si afferma che devi fare questo:

var people = context.People.SqlQuery("EXECUTE [dbo].[GetAllPeople]"); 

Questo solleva alcune preoccupazioni:

1) Si è ora chiamando una stored prodedure su il set, non il contesto. Le stored procedure devono essere disponibili in tutto il contesto, non legate a un particolare set di entità. Proprio come sono sotto il "Database" in SQL Server, e non sotto la "Tabella".

2) Per quanto riguarda i tipi complessi ? In precedenza avevo restituito un tipo complesso da una stored procedure. Ma ora, sembra che devi mappare direttamente a un'entità? Non ha alcun senso. Ho molti proc memorizzati che restituiscono un tipo non rappresentato direttamente da un ObjectSet/DBSet, che non riesco a vedere come posso accostare.

Spero che qualcuno possa chiarirlo, perché da quanto ho capito finora, non sarò in grado di effettuare l'aggiornamento a CTP5.

risposta

9

È possibile eseguire istruzioni SQL a livello di database come questo

using(var context = new MyContext()) 
{ 
    // custum sql statement 
    var c = context.Database.SqlQuery<int>("SELECT COUNT(*) FROM Employees"); 

    // returned entity type doesn't have to be represented by ObjectSet/DBSet 
    var e = context.Database.SqlQuery<Employee>("SELECT * FROM Employees"); 

    // stored procedure 
    var q = context.Database.SqlQuery<Employee>("GetEmployees"); 
} 
+0

Il che è esattamente quello che ho messo nella mia modifica alla mia domanda. – RPM1984

+2

Questo risponde alla tua prima preoccupazione. Gli sp sono disponibili in tutto il contesto. DbContext.Database è un riferimento all'oggetto DbDatabase incorporato. Questo è diverso da context.People.SqlQuery che opera su DbSet. –

+0

Ah, il tuo diritto, ti darà questa possibilità e tornerai da te. – RPM1984

Problemi correlati