使用EF Core工具从命令行创建数据库

Entity FrameworkCore (EF Core) 是一个轻量级的、可扩展的ORM(对象关系映射)框架,它允许.NET开发者以面向对象的方式来处理数据库操作。本文将介绍如何使用EF Core的命令行界面(CLI)工具来创建数据库,并在代码更改后进行迁移和更新数据库。

EFCorePowerTools简介

在讨论CLI工具之前,不得不提一下EFCorePowerTools,这是一个社区开源的图形界面工具,旨在支持与EF相关的操作。截至2023年5月,该工具仅提供了一些预览功能,对于这里的“Code First”方法并不实用。因此,将专注于官方的命令行接口(CLI)方法。

示例项目

创建了一个.NET7的控制台应用程序作为示例。以下是应用程序的代码:

public class Person { public int Id { get; set; } public string? Name { get; set; } public int Age { get; set; } public string? Address { get; set; } } public class Test1DbContext : DbContext { public Test1DbContext(DbContextOptions options) : base(options) { } public DbSet Persons { get; set; } } public class Test1DbContextFactory : IDesignTimeDbContextFactory { static Test1DbContextFactory() { IConfiguration config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", true, true) .Build(); connectionString = config["ConnectionStrings:Test1Connection"]; Console.WriteLine("ConnectionString:" + connectionString); } static string? connectionString = null; public Test1DbContext CreateDbContext(string[] args) { var optionsBuilder = new DbContextOptionsBuilder(); optionsBuilder.UseSqlServer(connectionString); return new Test1DbContext(optionsBuilder.Options); } } { "ConnectionStrings": { "Test1Connection": "Data Source=.;User Id=sa;Password=dbadmin1!;Initial Catalog=Test1;Encrypt=False" } }

如上所示,创建了一个名为Person的实体数据模型类。上下文Test1DbContext只包含一个DbSet属性Persons。预期的结果将是一个名为Test1的数据库,其中只有一个数据库表Persons。这是“Code First”方法,首先创建了实体类,然后将从代码创建数据库表。为此,需要工具,即CLI EF Core工具。

安装CLIEF Core工具

需要安装CLIEF Core工具并导航到项目文件夹。以下是需要的命令:

dotnet tool uninstall --global dotnet-ef dotnet tool install --global dotnet-ef --version 7.0.5 cd C:\Tmp\Example3\Example3\

安装完成后,可以开始创建数据库。

创建数据库

现在可以开始实际工作了。首先需要创建迁移文件。需要以下命令:

dotnet ef migrations add Initial -o Migrations -c Example3.Test1DbContext

执行后,Migration文件夹将创建迁移文件。

要实际创建数据库,需要以下命令:

dotnet ef database update -c Example3.Test1DbContext

执行后,SqlServer数据库Test1将被创建,其中包含Persons表。同时,数据库表__EFMigrationsHistory将被创建,它跟踪哪些迁移已经被应用。

更改代码/实体数据模型

通常,随着时间的推移,可能想要更改实体数据模型。这里,将通过向Person类添加一个新属性来说明这一点。将向类中添加Profession属性。

public class Person { public int Id { get; set; } public string? Name { get; set; } public int Age { get; set; } public string? Address { get; set; } public string? Profession { get; set; } }

现在情况是代码(实体数据模型)与数据库不同步。需要解决这个问题。

升级数据库

首先需要创建迁移文件。需要以下命令:

dotnet ef migrations add Work -o Migrations -c Example3.Test1DbContext

执行后,Migration文件夹中将创建20230530053706_Work.cs文件。

要实际更新数据库,需要以下命令:

dotnet ef database update -c Example3.Test1DbContext

执行后,SqlServer数据库Test1中的Persons表将创建Profession列。同时,数据库表__EFMigrationsHistory跟踪哪些迁移已经被应用。

测试应用程序

将创建一些代码来测试EF生成的模型。以下是测试代码:

using Example3.EntityDataModel; using Example3; Console.WriteLine("Hello from Example3"); using Test1DbContext ctx = new Test1DbContextFactory().CreateDbContext(new string[0]); Person per1 = new Person { Name = "Mark", Age = 33, Address = "Belgrade, Serbia", Profession = "Programmer" }; ctx.Persons.Add(per1); ctx.SaveChanges(); Console.WriteLine("Table Persons =================================="); foreach (var person in ctx.Persons) { Console.WriteLine("Id:" + person.Id.ToString() + " Name:" + person.Name); }

执行后,将在数据库表Persons中看到新添加的数据。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485