使用 Code First 迁移 为数据库设定种子

下载已完成项目

在本部分中,将使用 EF 中的Code First 迁移为数据库设定测试数据的种子。

“工具 ”菜单中选择“ NuGet 包管理器”,然后选择“ 包管理器控制台”。 在“Package Manager Console”窗口中,输入以下命令:

Enable-Migrations

此命令将名为 Migrations 的文件夹添加到项目中,并在 Migrations 文件夹中添加名为 Configuration.cs 的代码文件。

解决方案资源管理器的屏幕截图,其中显示了文件夹层次结构,其中配置点 c 文件以蓝色突出显示。

打开 Configuration.cs 文件。 添加以下 using 语句。

using BookService.Models;

然后将以下代码添加到 Configuration.Seed 方法:

protected override void Seed(BookService.Models.BookServiceContext context)
{
    context.Authors.AddOrUpdate(x => x.Id,
        new Author() { Id = 1, Name = "Jane Austen" },
        new Author() { Id = 2, Name = "Charles Dickens" },
        new Author() { Id = 3, Name = "Miguel de Cervantes" }
        );

    context.Books.AddOrUpdate(x => x.Id,
        new Book() { Id = 1, Title = "Pride and Prejudice", Year = 1813, AuthorId = 1, 
            Price = 9.99M, Genre = "Comedy of manners" },
        new Book() { Id = 2, Title = "Northanger Abbey", Year = 1817, AuthorId = 1, 
            Price = 12.95M, Genre = "Gothic parody" },
        new Book() { Id = 3, Title = "David Copperfield", Year = 1850, AuthorId = 2, 
            Price = 15, Genre = "Bildungsroman" },
        new Book() { Id = 4, Title = "Don Quixote", Year = 1617, AuthorId = 3, 
            Price = 8.95M, Genre = "Picaresque" }
        );
}

在“包管理器控制台”窗口中,键入以下命令:

Add-Migration Initial
Update-Database

第一个命令生成创建数据库的代码,第二个命令执行该代码。 数据库是使用 LocalDB 在本地创建的。

“包管理器控制台”窗口的屏幕截图,其中“启用迁移”、“添加迁移初始”和“更新数据库”行以红色圈圈。

探索 API (可选)

按 F5 以调试模式运行应用程序。 Visual Studio 启动IIS Express并运行 Web 应用。 然后,Visual Studio 启动浏览器并打开应用的主页。

当 Visual Studio 运行 Web 项目时,它会分配端口号。 在下图中,端口号为 50524。 运行应用程序时,会看到不同的端口号。

在调试模式下从 Visual Studio 启动的应用程序窗口的屏幕截图,其中 A P I 链接以红色圆圈并用红色箭头突出显示。

主页是使用 ASP.NET MVC 实现的。 页面顶部有一个显示“API”的链接。 此链接将介绍 Web API 自动生成的帮助页。 (若要了解如何生成此帮助页,以及如何将自己的文档添加到页面,请参阅为 ASP.NET Web API.) 可以单击帮助页链接以查看有关 API 的详细信息,包括请求和响应格式。

自动生成的帮助页的屏幕截图,其中显示了指向 API 功能文档的链接列表。

API 对数据库启用 CRUD 操作。 下面总结了 API。

Authors 说明
GET api/authors 获取所有作者。
GET api/authors/{id} 按 ID 获取作者。
POST /api/authors 创建新作者。
PUT /api/authors/{id} 更新现有作者。
DELETE /api/authors/{id} 删除作者。
书籍 说明
GET /api/books 获取所有书籍。
GET /api/books/{id} 按 ID 获取书籍。
POST /api/books 创建新书籍。
PUT /api/books/{id} 更新现有书籍。
DELETE /api/books/{id} 删除书籍。

查看数据库 (可选)

运行 Update-Database 命令时,EF 创建了数据库并调用 Seed 了 方法。 在本地运行应用程序时,EF 使用 LocalDB。 可以在 Visual Studio 中查看数据库。 在“视图”菜单中,选择“SQL Server 对象资源管理器”。

S Q L Server 对象资源管理器的屏幕截图,其中以蓝色突出显示了“S Q L 服务器”项,以黄色突出显示的“添加 SQ L 服务器”项。

在“ 连接到服务器 ”对话框的“ 服务器名称 ”编辑框中,键入“ (localdb) \v11.0”。 将 “身份验证 ”选项保留为“Windows 身份验证”。 单击“连接” 。

“连接到服务器”对话框的屏幕截图,其中显示了“服务器名称”字段中的“本地 d b v 11 点 0”文本,以蓝色突出显示。

Visual Studio 连接到 LocalDB 并在SQL Server 对象资源管理器窗口中显示现有数据库。 可以展开节点以查看 EF 创建的表。

S Q L Server 对象资源管理器的屏幕截图,其中显示了文件夹层次结构,其中以蓝色突出显示了“书籍服务上下文”项。

若要查看数据,请右键单击表,然后选择“ 查看数据”。

S Q L Server 对象资源管理器的屏幕截图,其中 d b o 点“Books”项以蓝色突出显示,“查看数据”项以黄色突出显示。

以下屏幕截图显示了“书籍”表的结果。 请注意,EF 使用种子数据填充了数据库,该表包含 Authors 表的外键。

Books 表的屏幕截图,其中显示了用种子数据填充的数据库以及包含外键的表。