私はMySql 5.5データベースを使用しています。 Entity Frameworkコードの最初の移行を使用してデータベースを作成し、DBContextクラスのMapToStoredProcedures()メソッドを使用してInsert UpdateおよびDelete操作のデフォルトストアドプロシージャを作成しました。カスタム移行クラスを追加しようとしています。以下のコードスニペット:私は更新-Databaseコマンドを使用するとC#MySQL EF 6コードの最初の移行動的where句prepareステートメントでエラーが発生するカスタムストアドプロシージャを作成
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;");
}
}
、ビューには、データベースに正しく作成取得されますが、ストアドプロシージャを作成するために、私は、エラーの下に受けています。
"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"
同じストアドプロシージャがデータベースで正常に動作しています。 私は.NETコードで@queryを記述していますが、データベースを更新している間は@ symbolなしのクエリとして検討しています。
ここでは、シードメソッドでそれらを作成する方法を示します。しかし、私はこれを好まない。 Can you create sql views/stored procedure using Entity Framework 4.1 Code first approach
上記のリンクとは別に、この問題や回避策を解決する方法を知っている人はいますか?