J'ai regardé plusieurs présentations d'EF Code First et je n'ai pas vu comment EFCF fonctionne avec les procédures stockées.
Comment puis-je déclarer une méthode qui utilisera des sp? Puis-je passer une entité à une méthode qui appelle sp sans mapper manuellement les propriétés d'entité aux paramètres sp?
Aussi, que se passe-t-il si je change de modèle? Est-ce que cela ferait tomber mon sp en recréant la table à partir du modèle? Et qu'en est-il des déclencheurs?
Si ces éléments ne sont pas pris en charge, existe-t-il des plans pour les soutenir à l'avenir?
Réponses:
EDIT: Ma réponse originale pour EF4.1 (ci-dessous) est maintenant obsolète. Veuillez consulter la réponse ci-dessous de Diego Vega (qui travaille dans l'équipe EF chez Microsoft)!
@gsharp et Shawn Mclean: Où obtenez-vous ces informations? N'avez-vous toujours pas accès à l'ObjectContext sous-jacent?
Remplacez l'instruction "select" par un proc stocké, et c'est parti.
Quant à votre autre question: oui, malheureusement, vos sp seront écrasés. Vous devrez peut-être ajouter les instructions "CREATE PROCEDURE" dans votre code.
Pour EF 4.2:
la source
Mise à jour: à partir d'EF6, EF Code First prend en charge le mappage de procédure stockée pour les insertions, les mises à jour et les suppressions. Vous pouvez spécifier le mappage de procédure stockée lors de la création du modèle à l'aide de la méthode MapToStoredProcedures. Nous prenons également en charge l'échafaudage automatique des procédures stockées de base pour ces opérations. Voir la spécification des fonctionnalités ici .
Réponse originale: nous n'aurons pas de support pour le mappage des procédures stockées dans le modèle dans Code-First dans la première version, ni nous n'aurons un moyen de générer automatiquement des procédures stockées pour les opérations CRUD à partir de vos types. Ce sont des fonctionnalités que nous aimerions ajouter à l'avenir.
Comme cela a été mentionné dans ce fil, il est possible de revenir à ObjectContext mais DbContext fournit également de belles API pour exécuter des requêtes et des commandes SQL natives (par exemple DbSet.SqlQuery, DbContext.Database.SqlQuery et DbContext.Database.ExecuteSqlCommand). Les différentes versions de SqlQuery ont la même fonctionnalité de matérialisation de base qui existe dans EF4 (comme ExecuteStoreQuery: http://msdn.microsoft.com/en-us/library/dd487208.aspx ).
J'espère que cela t'aides.
la source
la source
Une solution plus sûre de type serait la suivante:
http://strugglesofacoder.blogspot.be/2012/03/calling-stored-procedure-with-entity.html
L'utilisation de cette classe est:
la source
Pour .NET Core (EntityFrameworkCore), j'ai pu les faire fonctionner.
Ce n'est peut-être pas le plus soigné, mais cela fonctionne définitivement.
La migration pour ajouter la procédure stockée ressemble à ceci :
Je pourrais alors l'appeler avec le code suivant :
Plus tard, j'ai essayé d'obtenir certaines des données associées (une à plusieurs données de relation, par exemple le contenu de la publication) et le blog est revenu avec le contenu de la publication rempli comme prévu.
la source