La génération et l'accès à des procédures stockées à l'aide de Entity framework core
Je suis la mise en œuvre de Asp.Net Web de base de l'API , entity framework de base, de la base de données de la première approche à l'aide de Visual Studio 2017. J'ai réussi à générer le contexte et les fichiers de classe basée sur une base de données existante. J'ai besoin d'accéder à des procédures stockées à l'aide de mon contexte. Dans la version antérieure de l'entité cadre, il était simple en sélectionnant la procédure stockée objets en les assistant et en générant un edmx qui contient ces objets. Je ne puis accéder à des procédures stockées via le complexe de type objets exposés par entity framework. Comment puis-je faire quelque chose de similaire dans le cadre de l'entité de base. Un exemple de l'aide ?
Un exemple serait appréciée
Double Possible de Comment faire pour exécuter des procédures stockées dans l'Entity Framework?
Ligne 227 github.com/hherzl/CatFactory.SqlServer/blob/master/src/... C'est utile ?
OriginalL'auteur Tom | 2017-05-28
Vous devez vous connecter pour publier un commentaire.
Base de données de la première approche n'est pas là en EF Core avec edmx fichiers.Au lieu de cela, vous devez utiliser l'Échafaudage-DbContext
Installer les packages Nuget Microsoft.EntityFrameworkCore.Outils et Microsoft.EntityFrameworkCore.SqlServer.Conception
mais ce ne sera pas obtenir vos procédures stockées. Il est encore en travaux,le suivi de la question #245
Mais, 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
OriginalL'auteur Rohith
Les exemples ci-dessus fonctionne bien lors de l'exécution d'une Procédure Stockée, si vous vous attendez le résultat sera la même que tout objet est déjà définie. Mais que faire si vous voulez un jeu de résultats qui n'est pas pris en charge? Selon les développeurs de EF Core 2, c'est une fonctionnalité qui va venir, mais il y a déjà aujourd'hui une solution de facilité.
Créer le modèle que vous souhaitez utiliser pour votre sortie. Ce modèle représente la sortie, pas une table dans la base de données.
Puis l'ajouter à votre contexte, une nouvelle DBSet avec votre modèle:
Et puis faire comme ci-dessus, et l'utilisation de votre modèle pour la sortie:
J'espère que cela aide quelqu'un.
Vous pouvez les avoir dans un fichier différent avec classe partielle, pour le rendre plus facile.
Hey @Sami , pourriez-vous fournir la partielle de l'exemple de classe s'il vous plaît?
EXEC ReturnAllSamples {id}, {startdate}, {enddate}
va générer sql sans paramètres et peuvent être soumis à une injection SQL. .NET de Base donne un très approfondie message d'avertissement lorsque vous essayez d'exécuter votre procédure de cette façon. Il est préférable d'utiliser de la façon que l'on a accepté la réponse est.FromSql("EXECUTE dbo.GetProductByCategory {0}", productCategory)
Je pense que ce qu'il signifie est que vous pouvez créer un partiel de votre DbContext (ils produisent partiels) et ajouter votre DbSet<>. De cette façon, si vous régénérer votre contexte, vous ne perdrez pas la partielle.
OriginalL'auteur Sami
La solution de contournement que nous utilisons dans les EF de Base pour exécuter des procédures stockées pour obtenir les données en utilisant FromSql méthode et vous pouvez exécuter la procédure stockée de cette façon:
Mais pour Créer, mettre à Jour et Supprimer, nous utilisons ExecuteSqlCommand comme celle ci-dessous:
OriginalL'auteur Harold Javier
La solution Rohith /Harold Javier /Sami condition de travaux. Je voudrais ajouter que vous pouvez créer un EF6 projet pour générer les classes C# pour les jeux de résultats, puis copiez les fichiers sur votre EFCore projet. Si vous modifiez une procédure stockée, vous pouvez mettre à jour le fichier de résultat en utilisant les méthodes présentées ici: Procédures stockées et la mise à jour EDMX
Si vous avez besoin d'correspondant tapuscrit interfaces, vous pouvez installer ce VS2017 extension tapuscrit définition générateur: https://marketplace.visualstudio.com/items?itemName=MadsKristensen.TypeScriptDefinitionGenerator
Il y a toujours un couple de la copie, mais c'est moins fastidieux que de créer les classes manuellement.
Edit: il y a un VS2017 extension de la génération de la dbconext https://marketplace.visualstudio.com/items?itemName=ErikEJ.EFCorePowerTools. Il ne fait pas de procédures stockées, mais il fournit un clic droit sur l'élément de menu à partir de VS projet au lieu de la ligne de commande Échafaudage-DbContext.
OriginalL'auteur Seanli