Сначала создавать хранимые процедуры с использованием кода структуры Entity Framework?

Я использую Entity Framework Code First в моем текущем проекте. База данных состоит из множества таблиц, многих представлений и многих функций. Я могу создавать таблицы, используя First Entity Framework Code First. Но я не могу найти способ создания хранимых процедур с использованием Entity Framework Code First. Я знаю, что стратегия Database-First выполнит мое требование, и все будет хорошо, но я не хочу использовать стратегию Database-First в свой существующий код проекта.

Пожалуйста, помогите мне, кто лучший способ создать хранимые процедуры с использованием стратегии Entity Framework Code First?

Пожалуйста, помогите мне, спасибо.

Ответ 1

Вместо использования 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");
}

Ответ 2

С кодом Сначала вы всегда делаете Migrations. Миграции наследуются от объекта DbMigration, который имеет очень полезный метод:

DbMigration.Sql(строка)

Вот шаги:

1) Откройте консоль диспетчера пакетов из диспетчера пакетов NuGet

2) Тип add-migration CreateHelloWorldStoredProcedureExample

3) Visual Studio покажет вам новый класс с двумя пустыми методами: Вверх и Вниз

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 ");
    }

После этого просто запустите базу данных обновлений и это будет!

Примечание. Если вы используете SQL Server, избегайте использования предложения GO.

Ответ 3

Если вы используете 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");
    }
}

Ответ 4

В EF6 вы можете создавать хранимые процедуры с помощью Code First. Взгляните на статью