EF Core 入门Getting Started with EF Core

在本教程中,将创建一个 .NET Core 控制台应用,该应用使用 Entity Framework Core 对 SQLite 数据库执行数据访问。

你可在 Windows 上使用 Visual Studio,或在 Windows、macOS 或 Linux 上使用 .NET Core CLI 来学习本教程。

在 GitHub 上查看此文章的示例

先决条件Prerequisites

安装以下软件:

创建新项目Create a new project

  1. dotnet new console -o EFGetStarted
  2. cd EFGetStarted
  • 打开 Visual Studio
  • 单击“创建新项目”
  • 选择带有 C# 标记的“控制台应用 (.NET Core)” ,然后单击“下一步”
  • 输入“EFGetStarted”作为名称,然后单击“创建”

安装 Entity Framework CoreInstall Entity Framework Core

要安装 EF Core,请为要作为目标对象的 EF Core 数据库提供程序安装程序包。 本教程使用 SQLite 的原因是,它可在 .NET Core 支持的所有平台上运行。 有关可用提供程序的列表,请参阅数据库提供程序

  1. dotnet add package Microsoft.EntityFrameworkCore.Sqlite
  • “工具”>“NuGet 包管理器”>“包管理器控制台”

  • 运行以下命令:

    1. Install-Package Microsoft.EntityFrameworkCore.Sqlite

提示:还可以通过右键单击项目并选择“管理 NuGet 程序包”来安装包

创建模型Create the model

定义构成模型的上下文类和实体类。

  • .NET Core CLI
  • Visual Studio

  • 在项目文件夹中,使用以下代码创建 Model.cs

  • 右键单击项目,然后选择“添加”>“类”

  • 输入“Model.cs”作为名称,然后单击“添加”
  • 将此文件的内容替换为以下代码
  1. using System.Collections.Generic;
  2. using Microsoft.EntityFrameworkCore;
  3. namespace EFGetStarted
  4. {
  5. public class BloggingContext : DbContext
  6. {
  7. public DbSet<Blog> Blogs { get; set; }
  8. public DbSet<Post> Posts { get; set; }
  9. protected override void OnConfiguring(DbContextOptionsBuilder options)
  10. => options.UseSqlite("Data Source=blogging.db");
  11. }
  12. public class Blog
  13. {
  14. public int BlogId { get; set; }
  15. public string Url { get; set; }
  16. public List<Post> Posts { get; } = new List<Post>();
  17. }
  18. public class Post
  19. {
  20. public int PostId { get; set; }
  21. public string Title { get; set; }
  22. public string Content { get; set; }
  23. public int BlogId { get; set; }
  24. public Blog Blog { get; set; }
  25. }
  26. }

EF Core 还可以从现有数据库对模型进行反向工程

提示:为清楚起见,有意简化了此应用程序。 连接字符串不应存储在生产应用程序的代码中。 可能还需要将每个 C# 类拆分为其自己的文件。

创建数据库Create the database

以下步骤使用迁移创建数据库。

  • .NET Core CLI
  • Visual Studio

  • 运行以下命令:

    1. dotnet tool install --global dotnet-ef
    2. dotnet add package Microsoft.EntityFrameworkCore.Design
    3. dotnet ef migrations add InitialCreate
    4. dotnet ef database update

    这会安装 dotnet ef 和设计包,这是对项目运行命令所必需的。 migrations 命令为迁移搭建基架,以便为模型创建一组初始表。 database update 命令创建数据库并向其应用新的迁移。

  • 在“包管理器控制台”中运行以下命令

    1. Install-Package Microsoft.EntityFrameworkCore.Tools
    2. Add-Migration InitialCreate
    3. Update-Database

    这会安装 EF Core 的 PMC 工具Add-Migration 命令为迁移搭建基架,以便为模型创建一组初始表。 Update-Database 命令创建数据库并向其应用新的迁移。

创建、读取、更新和删除Create, read, update & delete

  • 打开 Program.cs 并将内容替换为以下代码:

    1. using System;
    2. using System.Linq;
    3. namespace EFGetStarted
    4. {
    5. class Program
    6. {
    7. static void Main()
    8. {
    9. using (var db = new BloggingContext())
    10. {
    11. // Create
    12. Console.WriteLine("Inserting a new blog");
    13. db.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
    14. db.SaveChanges();
    15. // Read
    16. Console.WriteLine("Querying for a blog");
    17. var blog = db.Blogs
    18. .OrderBy(b => b.BlogId)
    19. .First();
    20. // Update
    21. Console.WriteLine("Updating the blog and adding a post");
    22. blog.Url = "https://devblogs.microsoft.com/dotnet";
    23. blog.Posts.Add(
    24. new Post
    25. {
    26. Title = "Hello World",
    27. Content = "I wrote an app using EF Core!"
    28. });
    29. db.SaveChanges();
    30. // Delete
    31. Console.WriteLine("Delete the blog");
    32. db.Remove(blog);
    33. db.SaveChanges();
    34. }
    35. }
    36. }
    37. }

运行应用Run the app

  1. dotnet run

运行 .NET Core 控制台应用时,Visual Studio 使用不一致的工作目录。 (请参阅 dotnet/project-system#3619)这会导致引发异常:无此类表格:博客。 更新工作目录:

  • 右键单击项目,并选择“编辑项目文件”

  • 在 TargetFramework 属性下方,添加以下内容:

    1. <StartWorkingDirectory>$(MSBuildProjectDirectory)</StartWorkingDirectory>
  • 保存该文件

现在可以运行应用:

  • “调试”>“开始执行(不调试)”

后续步骤Next steps