Comment faire pour exécuter des procédures stockées dans Entity Framework Core?
Je suis en utilisant EF7 (Entity Framework) dans un ASP.NET de Base de l'App. Pouvez-vous svp m'indiquer la bonne façon de l'exécution des procédures stockées? L'ancienne méthode avec ObjectParameters
et ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction
ne fonctionne pas.
- Vous devez exécuter le PS, et d'obtenir certaines
DbSet
dans le résultat? Ou tout simplement de l'exécuter? - J'ai besoin d'obtenir les résultats!
- Pourquoi ne pas accepter la réponse ?
Vous devez vous connecter pour publier un commentaire.
De soutien pour la procédure stockée dans EF7 est résolu maintenant, cela contribue également à la cartographie des multiples résultats.
Vérifiez ici pour la correction de détails
Et vous pouvez l'appeler comme cela en c#
Set()
en EF de Base 1.1. Juste obtenirThe arguments for DbContext.Set<TEntity>() cannot be inferred from the usage
Procédure stockée n'est pas encore (comme de 7.0.0-beta3) mis en œuvre dans EF7. Vous pouvez suivre la progression de cette fonction à l'aide de question #245.
Pour l'instant, vous pouvez le faire à l'ancienne à l'aide de ADO.NET.
context.Database.AsRelational().Connection.DbConnection
.FromSql
maintenant.Pour exécuter les procédures stockées, utilisez FromSql méthode qui exécute les PREMIÈRES requêtes SQL
par exemple
À utiliser avec les paramètres
ou
Il y a certaines limites à exécuter des PREMIÈRES requêtes SQL ou des procédures stockées. Vous ne pouvez pas l'utiliser pour les INSERT/UPDATE/DELETE. si vous souhaitez exécuter des instructions INSERT, UPDATE, DELETE requêtes, utilisez le ExecuteSqlCommand
"(SqlConnection)context"
- Ce type de coulée ne fonctionne plus. Vous pouvez le faire:
"SqlConnection context;
".AsSqlServer()"
- N'Existe pas.
"command.ExecuteNonQuery();"
-- Ne retourne pas de résultats.
reader=command.ExecuteReader()
fonctionne.Avec dt.charge(lecteur)... alors vous devez passer le cadre de 5.0 et retour à 4.51, comme 5.0 ne prend pas en charge les tables de données/ensembles de données, encore. Remarque: C'est VS2015 RC.
Le soutien pour la procédure stockée en EF de Base est semblable aux versions antérieures de EF premier Code.
Vous avez besoin pour créer votre classe DbContext par inherting la classe DbContext de EF. Les procédures stockées sont en cours d'exécution à l'aide de la DbContext.
Première étape est d'écrire une méthode qui créer un DbCommand de la DbContext.
Pour passer des paramètres à la procédure stockée utiliser la méthode suivante.
Enfin pour la cartographie le résultat dans une liste d'objets personnalisés, utilisez le MapToList méthode.
Nous sommes maintenant prêts pour exécuter la stockées procedute avec le ExecuteStoredProc méthode et des cartes à la une Liste dont le type qui est transmis en tant que T.
Par exemple, pour exécuter une procédure stockée appelée “StoredProcedureName” avec deux paramètres appelés “firstparamname” et “secondparamname” c'est la mise en œuvre.
Actuellement EF 7 ou EF de Base ne prend pas en charge la bonne vieille méthode de l'importation de procédures Stockées, de designer et de les appeler directement. Vous pouvez avoir un coup d'oeil à la feuille de route pour voir ce qui va être pris en charge dans l'avenir:
EF base de la feuille de route.
Donc pour l'instant il est préférable d'utiliser SqlConnection pour appeler des procédures stockées ou des crus de la requête, puisque vous n'avez pas besoin de la totalité d'EF pour ce travail. En voici deux exemples:
Appel de la procédure stockée que le retour de valeur unique. Chaîne de caractères dans ce cas.
Appel de procédure stockée qui retourne une liste.
À les appeler une procédure stockée, il est préférable de créer statique de la classe qui détient la totalité de ces fonctions, par exemple, je l'ai appelé DataAccess classe, comme suit:
Et les Utilisateurs de la classe est comme ceci:
Par la façon dont vous n'avez pas besoin de vous soucier de la performance de l'ouverture et de la fermeture d'une connexion pour chaque demande de sql comme l'asp.net est de prendre soin de la gestion de ces pour vous.
Et j'espère que cela vous a été utile.
J'ai essayé toutes les autres solutions, mais n'a pas fonctionné pour moi. Mais j'ai une bonne solution et il peut être utile pour quelqu'un ici.
Pour appeler une procédure stockée et obtenir le résultat dans une liste de modèle EF de Base, nous avons à suivre 3 étapes.
L'étape 1.
Vous avez besoin d'ajouter une nouvelle catégorie à l'instar de votre classe d'entité. Ce qui devrait avoir des propriétés avec toutes les colonnes dans votre SP. Par exemple, si votre SP est de retour en deux colonnes appelé
Id
etName
alors votre nouvelle classe doit être quelque chose commeL'étape 2.
Puis vous devez ajouter un
DbQuery
bien dans votre classe DBContext pour votre SP.L'étape 3.
De maintenant, vous serez en mesure de les appeler et obtenir le résultat de votre SP de votre DBContext.
Je suis à l'aide d'un générique UnitOfWork & Référentiel. Donc ma fonction à exécuter la SP est
Espère que ce sera utile à quelqu'un !!!
J'ai trouvé cette extension très utile: StoredProcedureEFCore
Alors que l'utilisation est comme ça
J'ai eu beaucoup de mal avec le
ExecuteSqlCommand
etExecuteSqlCommandAsync
, DANS les paramètres ont été facile, mais les paramètres ont été très difficiles.J'ai dû revenir à l'utilisation
DbCommand
commeJe l'ai écrit plus à ce sujet dans ce post.
À l'aide de MySQL connector et Entity Framework Core 2.0
Mon problème était que j'étais une exception comme fx. Ex.Message = "La colonne requise "corps" n'était pas présent dans les résultats d'un "FromSql l'opération".". Ainsi, afin d'extraire les lignes via une procédure stockée de cette manière, vous devez retourner toutes les colonnes pour que le type d'entité qui la DBSet est associé, même si vous n'avez pas besoin d'accéder à tous pour votre demande actuelle.
OU avec des paramètres
Rien à faire... lors de la création de dbcontext pour une première approche de code initialiser
espace de noms ci-dessous l'API fluent zone de liste du ps et de l'utiliser à un autre endroit où vous voulez.
}
Si vous exécutez une procédure stockée à partir de Informix à l'aide de EntityFrameworkCore vous avez besoin d'inclure la commande EXÉCUTER la PROCÉDURE