我在我当前的项目中使用Entity Framework Code First。数据库由许多表,许多视图和许多函数组成。我可以使用Entity Framework Code First创建表。但我无法找到使用Entity Framework Code First创建存储过程的方法。我知道Database-First策略将满足我的要求,一切运行良好,但我不想将Database-First策略用于我现有的项目代码。
请帮助我一个人,使用Entity Framework Code First策略创建存储过程的最佳方法是什么?
您可以使用现有的EF方法,而不是使用StringBuilder
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(串)
以下是步骤:
1)从NuGet包管理器打开包管理器控制台
2)键入add-migration CreateHelloWorldStoredProcedureExample
3)Visual Studio会向您显示一个带有两个空方法的新类:Up和Down
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());
}
在Down方法中:
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");
}
}