在我当前的项目中,我首先使用了实体框架代码。数据库由许多表、许多视图和许多函数组成。我可以先使用实体框架代码创建表。但是我无法找到一种首先使用实体框架代码创建存储过程的方法。我知道Database-First策略可以满足我的需求,而且一切运行良好,但我不想在现有的项目代码中使用Database-First策略。
请帮帮我,使用实体框架代码优先策略创建存储过程的最好方法是什么?
发布于 2016-06-16 23:00:07
除了使用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");
}发布于 2015-11-23 08:30:08
有了Code First,您总是可以进行迁移。迁移继承自DbMigration对象,它有一个非常有用的方法:
DbMigration.Sql(字符串)
以下是步骤:
1)从NuGet包管理器中打开包管理器控制台
2)类型添加-迁移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语句。
发布于 2018-08-24 13:41:52
如果您使用的是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");
}
}https://stackoverflow.com/questions/20715292
复制相似问题