Читаем Язык программирования C#9 и платформа .NET5 полностью

Создайте в каталоге EfStructures проекта AutoLot.Dal новый файл по имени MigrationHelpers.cs. Добавьте оператор using для пространства имен Microsoft.EntityFrameworkCore.Migrations, сделайте класс открытым и статическим и поместите в него следующие методы, которые используют MigrationBuilder для запуска операторов SQL в отношении базы данных:

namespace AutoLot.Dal.EfStructures

{

  public static class MigrationHelpers

  {

    public static void CreateSproc(MigrationBuilder migrationBuilder)

    {

      migrationBuilder.Sql($@"

          exec (N'

          CREATE PROCEDURE [dbo].[GetPetName]

              @carID int,

              @petName nvarchar(50) output

          AS

          SELECT @petName = PetName from dbo.Inventory where Id = @carID

      ')");

    }

    public static void DropSproc(MigrationBuilder migrationBuilder)

    {

      migrationBuilder.Sql("DROP PROCEDURE [dbo].[GetPetName]");

    }

    public static void CreateCustomerOrderView(

      MigrationBuilder migrationBuilder)

    {

      migrationBuilder.Sql($@"

          exec (N'

          CREATE VIEW [dbo].[CustomerOrderView]

          AS

      SELECT dbo.Customers.FirstName, dbo.Customers.LastName,

             dbo.Inventory.Color, dbo.Inventory.PetName,

             dbo.Inventory.IsDrivable,

             dbo.Makes.Name AS Make

          FROM dbo.Orders

          INNER JOIN dbo.Customers ON dbo.Orders.CustomerId = dbo.Customers.Id

          INNER JOIN dbo.Inventory ON dbo.Orders.CarId = dbo.Inventory.Id

          INNER JOIN dbo.Makes ON dbo.Makes.Id = dbo.Inventory.MakeId

      ')");

    }

    public static void DropCustomerOrderView(MigrationBuilder migrationBuilder)

    {

      migrationBuilder.Sql("EXEC (N' DROP VIEW [dbo].[CustomerOrderView] ')");

    }

  }

}

<p id="AutBody_Root985"><strong>Обновление и применение миграции</strong></p>

Для каждого объекта SQL Server в классе MigrationHelpers имеется два метода: один создает объект, другой удаляет объект. Вспомните, что при применении миграции выполняется метод Up(), а при откате миграции — метод Down(). Вызовы статических методов создания должны попасть в метод Up() миграции, тогда как вызовы статических методов удаления — в метод Down() миграции. В результате применения миграции создаются два объекта SQL Server, которые в случае отката миграции благополучно удаляются. Ниже приведен модифицированный код миграции:

namespace AutoLot.Dal.EfStructures.Migrations

{

  public partial class SQL : Migration

  {

    protected override void Up(MigrationBuilder migrationBuilder)

    {

      MigrationHelpers.CreateSproc(migrationBuilder);

      MigrationHelpers.CreateCustomerOrderView(migrationBuilder);

    }

    protected override void Down(MigrationBuilder migrationBuilder)

    {

      MigrationHelpers.DropSproc(migrationBuilder);

      MigrationHelpers.DropCustomerOrderView(migrationBuilder);

    }

  }

}

Если вы удалили свою базу данных, чтобы запустить начальную миграцию, тогда можете применить эту миграцию и двигаться дальше. Примените миграцию, выполнив следующую команду:

dotnet ef database update -c AutoLot.Dal.EfStructures.ApplicationDbContext

если вы не удаляли свою базу данных для первой миграции, то процедура уже существует и не может быть снова создана. В таком случае легче всего закомментировать в методе Up() вызов статического метода, создающего хранимую процедуру:

protected override void Up(MigrationBuilder migrationBuilder)

{

// MigrationHelpers.CreateSproc(migrationBuilder);

  MigrationHelpers.CreateCustomerOrderView(migrationBuilder);

}

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных