9

Cela peut être une réponse simple, mais je ne vois pas comment exécuter une procédure stockée avec EF CTP5.Entity Framework CTP5 - Comment appeler une procédure stockée?

Dans Entity Framework 4.0, nous avons fait ceci:

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

Qui est une méthode sur le ObjectContext.

Mais DbContext n'a pas cette méthode.

Comment appelons-nous un proc stocké? N'est-il pas pris en charge dans EF CTP5?

EDIT:

Je trouve this thread, États dans lesquels vous devez faire ceci:

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

Cela soulève quelques préoccupations:

1) Vous appelez maintenant un stocké prodedure sur le défini, pas le contexte. Les procédures stockées doivent être disponibles à l'échelle du contexte et non liées à un ensemble d'entités particulier. Juste comme ils sont sous la "base de données" dans SQL Server, et non sous la "Table".

2) Qu'en est-il des types complexes? J'avais auparavant un type complexe renvoyé à partir d'une procédure stockée. Mais maintenant, il semble que vous devez mapper directement à une entité? Cela n'a aucun sens. J'ai beaucoup de procs stockés qui retournent un type non directement représenté par un ObjectSet/DBSet, que je ne peux pas voir comment je peux me garer. J'espère que quelqu'un peut éclaircir cela pour moi, parce que d'après ce que je comprends jusqu'à présent, je ne serai pas en mesure de mettre à niveau vers CTP5.

Répondre

9

Vous pouvez exécuter des instructions SQL base de données à l'échelle comme celui-ci

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

Ce qui est exactement ce que je mets dans ma modifier à ma question. – RPM1984

+2

Cela répond à votre première préoccupation. Les sp sont disponibles dans l'ensemble du contexte. DbContext.Database est une référence à l'objet DbDatabase intégré. Ceci est différent de context.People.SqlQuery qui fonctionne sur le DbSet. –

+0

Ahh votre droit, va essayer et revenir à vous. – RPM1984

Questions connexes