.NET Core 下的 EF Core 新数据库入门指南

    以下是完成当前演练所需的先决条件:

    • 支持 .NET Core 的操作系统
    • .NET Core SDK 2.0 (尽管通过少量修改就可以通过入门简介了解如何使用之前的版本创建应用程序)。

    创建新项目

    • 为你的项目新建一个 ConsoleApp.SQLite 目录,然后使用 dotnet 命令将 .NET Core 应用程序填充进去。

    要使用 EF Core 的话,就要根据你的目标数据库提供程序安装相应的程序包。当前演练使用的是 SQLite。查看 数据库提供程序 可获得可用提供程序的列表。

    • 安装 Microsoft.EntityFrameworkCore.Sqlite 和 Microsoft.EntityFrameworkCore.Design
    1. dotnet add package Microsoft.EntityFrameworkCore.Sqlite
    2. dotnet add package Microsoft.EntityFrameworkCore.Design
    • 手动编辑 ConsoleApp.SQLite.csproj,添加 DotNetCliToolReference 以将Microsoft.EntityFrameworkCore.Tools.DotNet 包含到项目中:

    现在的 ConsoleApp.SQLite.csproj 看起来应该是这样的:

    1. <Project Sdk="Microsoft.NET.Sdk">
    2. <PropertyGroup>
    3. <OutputType>Exe</OutputType>
    4. <TargetFramework>netcoreapp2.0</TargetFramework>
    5. </PropertyGroup>
    6. <ItemGroup>
    7. </ItemGroup>
    8. <ItemGroup>
    9. </ItemGroup>
    10. </Project>
    • 运行 dotnet restore 以安装新的程序包

    创建模型

    现在,是时候定义构成你的模型的上下文和实体类型了。

    • 创建新的 Model.cs 文件并用以下代码填充它。

    你已经有一个模型了,你可以使用迁移来创建数据库。

    • 运行 dotnet ef migrations add InitialCreate 以搭建迁移基架和创建模型对应的初始表集合。
    • 运行 dotnet ef database update 以将新的迁移应用到数据库。该命令会在应用迁移之前创建数据库。

    使用模型

    现在,你可以使用模型进行数据访问了

    • 打开 Program.cs
    • 使用以下代码替换类文件中的内容:
    1. using System;
    2. namespace ConsoleApp.SQLite
    3. {
    4. public class Program
    5. {
    6. public static void Main()
    7. {
    8. using (var db = new BloggingContext())
    9. var count = db.SaveChanges();
    10. Console.WriteLine("{0} records saved to database", count);
    11. Console.WriteLine();
    12. Console.WriteLine("All blogs in database:");
    13. foreach (var blog in db.Blogs)
    14. {
    15. Console.WriteLine(" - {0}", blog.Url);
    16. }
    17. }
    18. }
    19. }
    20. }
    • 测试应用程序:

    dotnet run

    一个博客已经保存到了数据库,然后所有的 blog 详细信息都被打印到了 控制台。

    • 如果你更改了模型,可以使用 dotnet ef migrations add 命令搭建新的基架来确保相应的模式能变更到数据库。一旦你签出了基架代码(并根据需要做了任何变更),可以使用 命令将变更应用到数据库。
    • EF 在数据库中使用 __EfMigrationHistory 表来记录哪些迁移已经被应用到数据库。
    • 由于SQLite 本身的限制,SQLite 并不支持所有的迁移(模式变更)。对于全新的开发,建议在你的模型变更时删除数据库并创建新库,而不是使用迁移。