如何从 EF Core 代码优先方法创建存储过程?
How to create a stored procedure from EF Core code first approach?
在 EF Core 中,我们可以使用实体 classes 添加表。存储过程是有用的组件之一。那么有什么方法可以从 DbContext
class 创建存储过程(就像使用 Dbset 我们可以创建表一样)?
已经经历了一些 links,其中在 EF6 中有一种推送存储过程的方法,尽管它似乎是一种解决方法。
引用Link-->EF 6 code-first with custom stored procedure
虽然我按照上面的 link,这意味着对于 EF6,迁移文件是从 DbMigration
继承的,在 EF Core 中它是 Migration
基础 class .我没有找到任何方法,而且可能没有找到太多相关的文章。
有什么帮助或建议吗?
一般情况下,我们在你migration
class的Up
方法中使用MigrationBuilder.Sql
方法创建存储过程,如下:
public partial class SPCreate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
//...
var sp = @"CREATE PROCEDURE [dbo].[GetStudents]
AS
BEGIN
select * from Students
END";
migrationBuilder.Sql(sp);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
//...
}
}
要执行一个存储过程,你可以调用FromSqlRaw
方法,像这样:
var students= _dbcontext.Students.FromSqlRaw("EXECUTE GetStudents").ToList();
在 EF Core 中,我们可以使用实体 classes 添加表。存储过程是有用的组件之一。那么有什么方法可以从 DbContext
class 创建存储过程(就像使用 Dbset 我们可以创建表一样)?
已经经历了一些 links,其中在 EF6 中有一种推送存储过程的方法,尽管它似乎是一种解决方法。
引用Link-->EF 6 code-first with custom stored procedure
虽然我按照上面的 link,这意味着对于 EF6,迁移文件是从 DbMigration
继承的,在 EF Core 中它是 Migration
基础 class .我没有找到任何方法,而且可能没有找到太多相关的文章。
有什么帮助或建议吗?
一般情况下,我们在你migration
class的Up
方法中使用MigrationBuilder.Sql
方法创建存储过程,如下:
public partial class SPCreate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
//...
var sp = @"CREATE PROCEDURE [dbo].[GetStudents]
AS
BEGIN
select * from Students
END";
migrationBuilder.Sql(sp);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
//...
}
}
要执行一个存储过程,你可以调用FromSqlRaw
方法,像这样:
var students= _dbcontext.Students.FromSqlRaw("EXECUTE GetStudents").ToList();