2017-08-20 1 views
0

J'utilise une approche code-first dans mon application. J'ai généré les entités (tables) en utilisant l'approche. Maintenant je voudrais créer une procédure stockée aussi bien par le code. Quelqu'un peut-il me guider comme j'ai essayé l'option de migration et il échoue. J'utilise Entity Framework Code Première approche. En utilisant ceci, j'ai créé Customer et quelques autres entités.Entity Framework code-first & procédure stockée

Maintenant, je veux créer une classe en utilisant la procédure stockée 'GetCustomers de contexte et de transmettre des paramètres et obtenir de résultats dans une collection

il doit retourner 2 collections comme ci-dessous

créer la procédure getCustomer @name nvarchar (max), @ int code postal

comme

select id, nom, code postal du client où nom comme (@name);

id select, nom, code postal du client où code postal = @ code postal

Je veux créer une procédure "GetCustomers de stockée en utilisant la classe de contexte et ne pas exécuter manuellement en DB.I besoin d'obtenir des résultats inférieurs:

1.Passer le paramètre de nom seul et retourner la première collection

2.Passer le paramètre de code postal seul et retourner la 2e collection.

méthode

3.Combine collection de résultat de 1 et 2 en une seule collection à l'aide de fusion

Répondre

2

Vous pouvez créer/générer une procédure stockée à l'aide CreateStoredProcedure() en utilisant l'option de migration Add- dans Entity Framework.

Étape 1: Générer un script de migration à l'aide add migration SP_DO_NOT_DELETE dans Package Manager Console. Si aucun changement de modèle n'est présent, le système générera un script de migration vide comme ci-dessous.

public partial class SP_DO_NOT_DELETE : DbMigration 
    { 
     public override void Up() 
     {  

     } 

     public override void Down() 
     { 

     } 
    } 

Étape 2: Après la génération du script, S'il vous plaît ajoutez votre procédure stockée à l'intérieur Up() et vers le bas() méthodes comme ci-dessous. Remarque: l'exemple ci-dessous, "dbo.GetNextDisplayId" est le nom de procédure stockée qui sera utilisé pour obtenir le NextAvailableDisplayId en utilisant la procédure stockée.

public partial class SP_DO_NOT_DELETE : DbMigration 
    { 
     public override void Up() 
     {  
     CreateStoredProcedure(
      "dbo.GetNextDisplayId", 
      body: 
       @"DECLARE @requestid INT 
         SELECT @requestid = NextAvailableDisplayId 
         FROM [TrackingNumberHistories] WITH (TABLOCKX) 

         UPDATE [TrackingNumberHistories] 
         SET NextAvailableDisplayId = @requestid + 1 

         SELECT @requestid AS 'NextAvailableDisplayId'" 
     ); 
     } 

     public override void Down() 
     { 
      DropStoredProcedure("dbo.GetNextDisplayId"); 
     } 
    } 

Remarque: CreateStoredProcedure() dans Up() méthode La procédure stockée automatiquement créent chaque fois en cours d'exécution script de migration. DropStoredProcedure() dans Down() sera utilisé pour supprimer la procédure stockée lorsque nous annulons/supprimons automatiquement la procédure stockée dans le script de migration.

Espérons que cela pourrait vous aider à aller de l'avant !!