現在のプロジェクトでEntity Framework Code Firstを使用しています。データベースは、多くのテーブル、多くのビュー、および多くの機能で構成されています。 Entity Framework Code Firstを使用してテーブルを作成できます。しかし、Entity Framework Code Firstを使用してストアドプロシージャを作成する方法を見つけることができません。 Database-First戦略が私の要件を満たし、すべてがうまく機能することは知っていますが、Database-First戦略を既存のプロジェクトコードに使用したくありません。
誰か助けてください、Entity Framework Code First戦略を使用してストアドプロシージャを作成する最良の方法は何ですか?
StringBuilderを使用する代わりに、既存のEFメソッドを使用できます。
public override void Up()
{
CreateStoredProcedure(
"MyStoredProcedure",
p => new
{
id = p.Int()
},
@"SELECT some-data FROM my-table WHERE id = @id"
);
}
public override void Down()
{
DropStoredProcedure("MyStoredProcedure");
}
Code Firstでは、常に移行を行います。移行は、非常に便利なメソッドを持つDbMigrationオブジェクトを継承します。
DbMigration.Sql(string)
手順は次のとおりです。
1)NuGetパッケージマネージャーからパッケージマネージャーコンソールを開きます
2)add-migration CreateHelloWorldStoredProcedureExampleと入力します
3)Visual Studioは、UpとDownという2つの空のメソッドを持つ新しいクラスを表示します
4)Upメソッドで、コードを記述します。以下に例を示します
public override void Up()
{
StringBuilder storedProcedureCode = new StringBuilder();
storedProcedureCode.Append("CREATE PROCEDURE dbo.HelloWorld" + Environment.NewLine);
storedProcedureCode.Append("AS" + Environment.NewLine);
storedProcedureCode.Append("BEGIN" + Environment.NewLine);
storedProcedureCode.Append(@"SELECT 'Hello World'" + Environment.NewLine);
storedProcedureCode.Append("END" + Environment.NewLine);
this.Sql(storedProcedureCode.ToString());
}
ダウン方式の場合:
public override void Down()
{
this.Sql("DROP PROCEDURE dbo.HelloWorld ");
}
この後、update-databaseを実行するだけです!
注:SQL Serverを使用する場合は、GO文の使用を避けてください。
EF Core 2.1を使用している場合、次のような方法でストアドプロシージャを作成できます。
public partial class AddStoredProcedure : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql(@"your create procedure statement");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql(@"your drop procedure statement");
}
}