Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
case EntityState.Unchanged: action = e.OldState switch { EntityState.Added => "Added", EntityState.Modified => "Edited", _ => action }; Console.WriteLine($"The object was {action}"); break; }}Создание миграции и обновление базы данных
На этой стадии оба проекта компилируются и все готово к созданию еще одной миграции для обновления базы данных. Введите в каталоге проекта
AutoLot.Daldotnet ef migrations add UpdatedEntities -o EfStructuresMigrations -c AutoLot.Dal.EfStructures.ApplicationDbContextdotnet ef database update UpdatedEntities -c AutoLot.Dal.EfStructures.ApplicationDbContextДобавление представления базы данных и хранимой процедуры
Осталось внести в базу данных два изменения: создать хранимую процедуру
GetPetNameOrdersCustomerCarMakeДобавление класса MigrationHelpers
Хранимая процедура и представление будут создаваться с использованием миграции, которая требует написания кода вручную. Причина поступать так (вместо того, чтобы просто открыть Azure Data Studio и запустить код T-SQL) — желание поместить полное конфигурирование базы данных в один процесс. Когда все содержится в миграциях, единственный вызов
dotnet ef database updateВыполнение команды
the dotnet ef migrations addUp()Down()dotnet ef migrations add SQL -o EfStructuresMigrations -c AutoLot.Dal.EfStructures.ApplicationDbContextСоздайте в каталоге
EfStructuresAutoLot.DalMigrationHelpers.csusingMicrosoft.EntityFrameworkCore.MigrationsMigrationBuildernamespace 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] ')"); } }}Обновление и применение миграции
Для каждого объекта SQL Server в классе
MigrationHelpersUp()Down()Up()Down()