Язык программирования 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.Dal
dotnet ef migrations add UpdatedEntities -o EfStructuresMigrations
-c AutoLot.Dal.
EfStructures.ApplicationDbContext
dotnet ef database update UpdatedEntities
-c AutoLot.Dal.EfStructures.ApplicationDbContext
Добавление представления базы данных и хранимой процедуры
Осталось внести в базу данных два изменения: создать хранимую процедуру
GetPetName
Orders
Customer
Car
Make
Добавление класса MigrationHelpers
Хранимая процедура и представление будут создаваться с использованием миграции, которая требует написания кода вручную. Причина поступать так (вместо того, чтобы просто открыть Azure Data Studio и запустить код T-SQL) — желание поместить полное конфигурирование базы данных в один процесс. Когда все содержится в миграциях, единственный вызов
dotnet ef database update
Выполнение команды
the dotnet ef migrations add
Up()
Down()
dotnet ef migrations add SQL -o EfStructuresMigrations
-c AutoLot.Dal.EfStructures.
ApplicationDbContext
Создайте в каталоге
EfStructures
AutoLot.Dal
MigrationHelpers.cs
using
Microsoft.EntityFrameworkCore.Migrations
MigrationBuilder
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] ')");
}
}
}
Обновление и применение миграции
Для каждого объекта SQL Server в классе
MigrationHelpers
Up()
Down()
Up()
Down()