首页>教程>EF Core教程>Entity Framework Core入门

需要支持?

如果通过文档没办法解决您的问题,请提交工单获取我们的支持!

Entity Framework Core入门

内容纲要

安装 Entity Framework Core

先决条件

  • EF Core 是一个 .NET Standard 2.0 库。 因此,EF Core 需要支持运行 .NET Standard 2.0 的实现。 其他 .NET Standard 2.0 库也可引用 EF Core。
  • 例如,可使用 EF Core 开发面向 .NET Core 的应用。 生成 .NET Core 应用需要 .NET Core SDK。 还可选择使用 Visual StudioVisual Studio for Mac 或 Visual Studio Code 等开发环境。
  • 可在 Windows 上的 Visual Studio 中使用 EF Core 来开发应用程序。 建议使用最新版本的 Visual Studio。
  • EF Core 可以在 Xamarin 和 .NET Native 等其他 .NET 实现上运行。 但在实践中,这些实现具有运行时限制,可能会影响 EF Core 处理应用的效率。
  • 最后,不同的数据库提供程序可能需要特定的数据库引擎版本、.NET 实现或操作系统。 请确保可用的 EF Core 数据库提供程序支持适用于应用程序的环境。

获取 Entity Framework Core 运行时

要将 EF Core 添加到应用程序,请安装适用于要使用的数据库提供程序的 NuGet 包。

如果要生成 ASP.NET Core 应用程序,不需要安装内存中和 SQL Server 提供程序。 这些提供程序随 EF Core 运行时一起包含在当前版本的 ASP.NET Core 中。

要安装或更新 NuGet 包,可以使用 .NET Core 命令行界面 (CLI)、Visual Studio 包管理器对话框或 Visual Studio 包管理器控制台。

.NET Core CLI

在操作系统的命令行中使用以下 .NET Core CLI 命令来安装或更新 EF Core SQL Server 提供程序:

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

可以使用 -v 修饰符在 dotnet add package 命令中指明特定的版本。 例如,若要安装 EF Core 2.2.0 包,请将 -v 2.2.0 追加到命令中。

Visual Studio NuGet 包管理器对话框

  • 从 Visual Studio 菜单中选择“项目”>“管理 NuGet 包”
  • 单击“浏览”或“更新”选项卡
  • 若要安装或更新 SQL Server 提供程序,请选择 Microsoft.EntityFrameworkCore.SqlServer 包并确认。

Visual Studio NuGet 包管理器控制台

从 Visual Studio 菜单中选择“工具”>“NuGet 包管理器”>“包管理器控制台”

若要安装 SQL Server 提供程序,请在包管理器控制台中运行以下命令:

Install-Package Microsoft.EntityFrameworkCore.SqlServer

若要更新提供程序,使用 Update-Package 命令。

若要指定特定版本,可以使用 -Version 修饰符。 例如,若要安装 EF Core 2.2.0 包,请将 -Version 2.2.0 追加到命令中

获取 Entity Framework Core 工具

可以安装工具来执行项目中与 EF Core 相关的任务,例如创建和应用数据库迁移,或基于现有数据库创建 EF Core 模型。

提供了两个工具集:

  • .NET Core 命令行接口 (CLI) 工具可用于 Windows、Linux 或 macOS。 这些命令以 dotnet ef 开头。
  • 包管理器控制台 (PMC) 工具在 Windows 上的 Visual Studio 中运行。 这些命令以动词开头,例如 Add-MigrationUpdate-Database

虽然也可在包管理器控制台中使用 dotnet ef 命令,但在使用 Visual Studio 时建议使用包管理器控制台工具:

  • 它们会自动使用在 Visual Studio 的 PMC 中选择的当前项目,无需手动切换目录。
  • 命令完成后,它们会自动在 Visual Studio 中打开命令所生成的文件。

获取 .NET Core CLI 工具

.NET core CLI 工具需要前面的系统必备中提到的 .NET Core SDK。

必须将 dotnet ef 安装为全局工具或本地工具。 大多数开发人员偏向于使用以下命令将 dotnet ef 安装为全局工具:

dotnet tool install --global dotnet-ef

还可用作本地工具。 若要将它用作本地工具,请使用工具清单文件恢复声明为工具依赖项的项目的依赖项。

若要更新工具,请使用 dotnet tool update 命令。

安装最新的 Microsoft.EntityFrameworkCore.Design 包。

dotnet add package Microsoft.EntityFrameworkCore.Design

重要

请务必使用与运行时包主版本匹配的工具包版本。

获取包管理器控制台工具

若要获取适用于 EF Core 的包管理器控制台工具,请安装 Microsoft.EntityFrameworkCore.Tools 包。 例如,在 Visual Studio 中:

Install-Package Microsoft.EntityFrameworkCore.Tools

ASP.NET Core 应用自动随附此包。

升级到最新版本的 EF Core

  • 每次发布新版本的 EF Core 时,我们都还会在 EF Core 项目中发布新版本的提供程序,如 Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Sqlite 和 Microsoft.EntityFrameworkCore.InMemory。 只需升级到新版本的提供程序即可获取所有改进。
  • EF Core 以及 SQL Server 和内存中提供程序包含在当前版本的 ASP.NET Core 中。 若要将现有 ASP.NET Core 应用程序升级到较新版本的 EF Core,请务必升级 ASP.NET Core 的版本。
  • 如需更新使用第三方数据库提供程序的应用程序,请始终检查与要使用的 EF Core 版本兼容的提供程序有无更新。 例如,版本 1.0 的数据库提供程序与版本 2.0 的 EF Core 运行时不兼容。
  • 用于 EF Core 的第三方提供程序通常不随 EF Core 运行发布修补程序版本。 若要将使用第三方提供程序的应用程序升级到 EF Core 的修补程序版本,可能需要添加对单独的 EF Core 运行时组件(如 Microsoft.EntityFrameworkCore 和 Microsoft.EntityFrameworkCore.Relational)的直接引用。

EF Core 入门

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

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

在 GitHub 上查看此文章的示例

先决条件

安装以下软件:

.NET Core CLI

.NET Core SDK

Visual Studio

创建新项目

.NET Core CLI

dotnet new console -o EFGetStarted
cd EFGetStarted

Visual Studio

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

安装 Entity Framework Core

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

.NET Core CLI

dotnet add package Microsoft.EntityFrameworkCore.Sqlite

Visual Studio

“工具”>“NuGet 包管理器”>“包管理器控制台”。

运行以下命令:

Install-Package Microsoft.EntityFrameworkCore.Sqlite

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

创建模型

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

.NET Core CLI

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

Visual Studio

  • 右键单击项目,然后选择“添加”>“类”
  • 输入“Model.cs”作为名称,然后单击“添加”
  • 将此文件的内容替换为以下代码
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    public string DbPath { get; }

    public BloggingContext()
    {
        var folder = Environment.SpecialFolder.LocalApplicationData;
        var path = Environment.GetFolderPath(folder);
        DbPath = System.IO.Path.Join(path, "blogging.db");
    }

    // The following configures EF to create a Sqlite database file in the
    // special "local" folder for your platform.
    protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseSqlite($"Data Source={DbPath}");
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; } = new();
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

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

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

创建数据库

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

.NET Core CLI

运行以下命令

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

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

Visual Studio

在“包管理器控制台(PMC)”中,运行以下命令

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

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

创建、读取、更新和删除

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

using System;
using System.Linq;

using var db = new BloggingContext();

// Note: This sample requires the database to be created before running.
Console.WriteLine($"Database path: {db.DbPath}.");

// Create
Console.WriteLine("Inserting a new blog");
db.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
db.SaveChanges();

// Read
Console.WriteLine("Querying for a blog");
var blog = db.Blogs
    .OrderBy(b => b.BlogId)
    .First();

// Update
Console.WriteLine("Updating the blog and adding a post");
blog.Url = "https://devblogs.microsoft.com/dotnet";
blog.Posts.Add(
    new Post { Title = "Hello World", Content = "I wrote an app using EF Core!" });
db.SaveChanges();

// Delete
Console.WriteLine("Delete the blog");
db.Remove(blog);
db.SaveChanges();

运行应用

.NET Core CLI

dotnet run

Visual Studio

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

后续步骤

  • 按照 ASP.NET Core 教程在 Web 应用中使用 EF Core
  • 了解有关 LINQ 查询表达式的详细信息
  • 配置模型指定必需项和最大长度等内容
  • 在更改模型后使用迁移来更新数据库架构

EF Core NuGet 包

Entity Framework Core (EF Core) 以 NuGet 包的形式提供。 应用程序所需的包取决于:

  • 所使用的数据库系统类型(SQL Server、SQLite 等)
  • 所需的 EF Core 功能

安装包的常规过程是:

  • 确定数据库提供程序并安装相应的包
  • 如果使用关系数据库提供程序,还需安装 Microsoft.EntityFrameworkCore 和 Microsoft.EntityFrameworkCore.Relational。 这有助于确保使用一致的版本,同时也意味着 NuGet 会在新的包版本发布时通知你。
  • 或者确定所需的工具类型,并为此安装相应的包

包版本

请务必安装 Microsoft 提供的所有 EF Core 包的同一版本。 例如,如果安装了 5.0.3 版本的 Microsoft.EntityFrameworkCore.SqlServer,则所有其他 Microsoft.EntityFrameworkCore.* 包也必须为 5.0.3 版本。

此外,请确保所有外部包都与所使用的 EF Core 的版本兼容。 特别是,检查外部数据库提供程序是否支持你所使用的 EF Core 版本。 EF Core 的新主版本通常需要更新的数据库提供程序。

 警告

NuGet 不强制使用一致的包版本。 请始终仔细检查你在 .csproj 文件或等效文件中引用的包版本。

数据库提供程序

EF Core 通过使用“数据库提供程序”支持不同的数据库系统。 每个系统都有自己的数据库提供程序,而提供程序以 NuGet 包的形式提供。 应用程序应安装其中一个或多个提供程序包。

下表列出了常见的数据库提供程序。

数据库系统
SQL Server 和 SQL AzureMicrosoft.EntityFrameworkCore.SqlServer
SQLiteMicrosoft.EntityFrameworkCore.Sqlite
Azure Cosmos DBMicrosoft.EntityFrameworkCore.Cosmos
PostgreSQLNpgsql.EntityFrameworkCore.PostgreSQL*
MySQLPomelo.EntityFrameworkCore.MySql*
EF Core 内存中数据库**Microsoft.EntityFrameworkCore.InMemory

*这些是由社区开发和提供的热门高质量开源提供程序。 列出的其他提供程序由 Microsoft 提供。

**仔细考虑是否使用内存中提供程序。 它不是为生产用途而设计的,也可能不是用于测试的最佳解决方案。

工具

使用用于 EF Core 迁移和现有数据库中的反向工程(基架)的工具需要安装相应的工具包:

  • 可在 Visual Studio 包管理器控制台中使用的 PowerShell 工具的 Microsoft.EntityFrameworkCore.Tools
  • 跨平台命令行工具的 dotnet-ef 和 Microsoft.EntityFrameworkCore.Design

提示

默认情况下,Microsoft.EntityFrameworkCore.Design 包的安装方式有所不同,它不会随应用程序一起部署。 这也意味着,其类型不能在其他项目中传递使用。 如果需要访问此包中的类型,请在 .csproj 文件或等效文件中使用常规 PackageReference

扩展包

Microsoft 和第三方以 NuGet 包的形式发布了许多 EF Core 扩展。 常用包包括:

功能附加依赖项
用于延迟加载和更改跟踪的代理Microsoft.EntityFrameworkCore.ProxiesCastle.Core
对 SQL Server 的空间支持Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuiteNetTopologySuite 和 NetTopologySuite.IO.SqlServerBytes
对 SQLite 的空间支持Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuiteNetTopologySuite 和 NetTopologySuite.IO.SpatiaLite
对 PostgreSQL 的空间支持Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuiteNetTopologySuite 和 NetTopologySuite.IO.PostGIS(通过 Npgsql.NetTopologySuite)
对 MySQL 的空间支持Pomelo.EntityFrameworkCore.MySql.NetTopologySuiteNetTopologySuite

其他包

其他 EF Core 包作为数据库提供程序包的依赖项进行拉取。 但是,建议为这些包添加显式包引用,这样 NuGet 在发布新版本时会提供通知。

功能
EF Core 基本功能Microsoft.EntityFrameworkCore
通用关系数据库功能Microsoft.EntityFrameworkCore.Relational
用于 EF Core 特性等的轻型包。Microsoft.EntityFrameworkCore.Abstractions
EF Core 使用情况的 Roslyn 代码分析器Microsoft.EntityFrameworkCore.Analyzers
没有原生 SQLite 依赖项的 EF Core SQLite 提供程序Microsoft.EntityFrameworkCore.Sqlite.Core

用于数据库提供程序测试的包

以下包用于测试外部 GitHub 存储库中内置的数据库提供程序。 有关示例,请参阅 efcore.pg 和 Pomelo.EntityFrameworkCore.MySql。 应用程序不应安装这些包。

功能
测试任何数据库提供程序Microsoft.EntityFrameworkCore.Specification.Tests
测试关系数据库提供程序Microsoft.EntityFrameworkCore.Relational.Specification.Tests

已过时的包

请勿安装以下已过时的包,如果项目中当前安装了这些包,请将其删除:

  • Microsoft.EntityFrameworkCore.Relational.Design
  • Microsoft.EntityFrameworkCore.Tools.DotNet
  • Microsoft.EntityFrameworkCore.SqlServer.Design
  • Microsoft.EntityFrameworkCore.Sqlite.Design
  • Microsoft.EntityFrameworkCore.Relational.Design.Specification.Tests
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索