2016-07-05 18 views
0

Ich benutze MySql 5.5-Datenbank. Ich habe meine Datenbank mit den ersten Migrationen des Entity Framework-Codes erstellt und standardmäßige gespeicherte Prozeduren für das Einfügen von Updates und das Löschen von Operationen mit der MapToStoredProcedures() - Methode in der DBContext-Klasse erstellt. Ich versuche, eine benutzerdefinierte Migrationsklasse hinzuzufügen. Code-Snippet:C# MySQL EF 6 Code Erste Migrationen erstellen benutzerdefinierte gespeicherte Prozedur mit dynamischen Where-Klausel Vorbereitung Anweisung gibt Fehler

using System; 
using System.Data.Entity.Migrations; 

public partial class Views : DbMigration 
{ 
    public override void Up() 
    { 
     Sql(@" 
      CREATE VIEW View_Jobs 
      AS 
      select 
      job.JobId as JobId, 
      job.JobNo as JobNo, 
      ...."; 
     ); 

     CreateStoredProcedure(
      "dbo.GetOpenJobs", 
      p => new 
      { 
       UserId = p.Long(), 
       RoleId = p.Long() 
      }, 
      body: 
      @" 
      DECLARE query varchar(1000); 
      DECLARE strWhere varchar(100); 

      set @query = 'select JobId, JobNo, ... from view_jobs '; 

      IF RoleId <> 1 THEN 
       set @query = concat(@query, ' WHERE AssignedTo = ', UserId, ' AND AssignedToRole = ', RoleId, ' '); 
      end if; 

      set @query = concat(@query, ' group by JobId, JobNo,... '); 

      select @query; 

      PREPARE stmt FROM @query; 
      EXECUTE stmt; 
      DEALLOCATE PREPARE stmt;" 
     ); 
    } 

    public override void Down() 
    { 
     DropStoredProcedure("dbo.GetOpenJobs"); 
     Sql(@"DROP VIEW IF EXISTS view_jobs;"); 
    } 
} 

wenn ich ein Update-Befehl Datenbank verwende, wird die Ansicht ordnungsgemäß in der Datenbank erstellt zu werden, aber für gespeicherte Prozedur erstellen i unten Fehler sind zu empfangen.

"You have an error in your SQL syntax; check the manual that corresponds to  your MySQL server version for the right syntax to use near 'query; 
      EXECUTE stmt; 
      DEALLOCATE PREPARE stmt; 
END' at line 19" 

Das gleiche gespeicherte Proc funktioniert gut in der Datenbank. Obwohl ich @query in meinem .NET-Code erwähnt habe, wird beim Aktualisieren der Datenbank als Abfrage ohne @ -Symbol betrachtet.

Hier ist eine Arbeit um sie in Seed-Methode zu erstellen. Aber ich bevorzuge das nicht. Can you create sql views/stored procedure using Entity Framework 4.1 Code first approach

Weiß jemand, wie man dieses oder jede verfügbare Arbeit außer dem oben genannten freigegebenen Link löst?

Antwort

0

CreateStoredProcedure() obwohl beabsichtigt, gespeicherte Prozedur in Mysql-Datenbank zu erstellen funktioniert nicht ordnungsgemäß, wenn wir die Prepare-Anweisung darin verwenden.

Anstatt CreateStoredProcedure() -Methode zu verwenden, habe ich Sql() verwendet, um die gespeicherte Prozedur zu erstellen, und schließlich hat es funktioniert.

Auch in der Verbindungszeichenfolge sollte Benutzervariablen zulassen = true angegeben werden, ohne dass dies nicht funktioniert.