将创建一个 .NET Core 控制台应用,该应用使用 Entity Framework Core 对 SQLite 数据库执行数据访问。
.NET Core SDK
Visual Studio 2019版本16.3或更高版本
.NET Core跨平台开发
.NET 6.0运行时(LTS)和.NET Core 3.1运行时(LTS)
打开 Visual Studio

单击“创建新项目”

选择带有 C# 标记的“控制台应用 (.NET Core)” ,然后单击“下一步”

输入“EFGetStarted”作为名称,然后单击“创建”
要安装 EF Core,请为要作为目标对象的 EF Core 数据库提供程序安装程序包。 本教程使用 SQLite 的原因是,它可在 .NET Core 支持的所有平台上运行。
“工具”>“NuGet 包管理器”>“包管理器控制台”。

运行以下命令:
Install-Package Microsoft.EntityFrameworkCore.Sqlite
提示:还可以通过右键单击项目并选择“管理 NuGet 程序包”来安装包。


- 每个包都由其所有者许可给你。NuGet 不负责第三方包,也不授予其许可证。一些包可能包括受其他许可证约束的依赖关系。单击包源(源) URL 可确定任何依赖关系。
-
- 程序包管理器控制台主机版本 6.3.0.131
-
- 键入 "get-help NuGet" 可查看所有可用的 NuGet 命令。
-
- PM> Install-Package Microsoft.EntityFrameworkCore.Sqlite
- 正在还原 C:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\C#\EFGetStarted\EFGetStarted\EFGetStarted.csproj 的包...
- GET https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.sqlite/index.json
- OK https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.sqlite/index.json 284 毫秒
- GET https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.sqlite/6.0.8/microsoft.entityframeworkcore.sqlite.6.0.8.nupkg
- OK https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.sqlite/6.0.8/microsoft.entityframeworkcore.sqlite.6.0.8.nupkg 67 毫秒
- 已通过内容哈希 SCDjo2xtsL/7h1ugbHR7kOrSsBNcoGvyeuyfAIQ1yWJh5pRYOj/EOV8vTkzXY6LylnbL+hH1+ZPlV3e1cakiuw== 从 https://api.nuget.org/v3/index.json 安装 Microsoft.EntityFrameworkCore.Sqlite 6.0.8 。
- Install-Package : NU1202: 包 Microsoft.EntityFrameworkCore.Sqlite 6.0.8 与 netcoreapp3.1 (.NETCoreApp,Version=v3.1) 不兼容。 包 Microsoft.EntityFrameworkCore.Sql
- ite 6.0.8 支持: net6.0 (.NETCoreApp,Version=v6.0)
- 所在位置 行:1 字符: 1
- + Install-Package Microsoft.EntityFrameworkCore.Sqlite
- + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- + CategoryInfo : NotSpecified: (:) [Install-Package], Exception
- + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
-
- Install-Package : 程序包还原失败。正在回滚“EFGetStarted”的程序包更改。
- 所在位置 行:1 字符: 1
- + Install-Package Microsoft.EntityFrameworkCore.Sqlite
- + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- + CategoryInfo : NotSpecified: (:) [Install-Package], Exception
- + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
-
- 已用时间: 00:00:06.1956456
- PM>
定义构成模型的上下文类和实体类。
右键单击项目,然后选择“添加”>“类”

输入“Model.cs”作为名称,然后单击“添加”

将此文件的内容替换为以下代码
- using Microsoft.EntityFrameworkCore;
- using System;
- using System.Collections.Generic;
-
- public class BloggingContext : DbContext
- {
- public DbSet
Blogs { get; set; } - public DbSet
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
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; }
- }
使用迁移创建数据库。
在“包管理器控制台(PMC)”中,运行以下命令
- Install-Package Microsoft.EntityFrameworkCore.Tools
- Add-Migration InitialCreate
- Update-Database
这会安装 EF Core 的 PMC 工具。 Add-Migration 命令为迁移搭建基架,以便为模型创建一组初始表。 Update-Database 命令创建数据库并向其应用新的迁移。

- PM> Install-Package Microsoft.EntityFrameworkCore.Tools
- 正在还原 C:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\C#\EFGetStarted\EFGetStarted\EFGetStarted.csproj 的包...
- GET https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.tools/index.json
- OK https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.tools/index.json 507 毫秒
- GET https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.tools/6.0.8/microsoft.entityframeworkcore.tools.6.0.8.nupkg
- OK https://api.nuget.org/v3-flatcontainer/microsoft.entityframeworkcore.tools/6.0.8/microsoft.entityframeworkcore.tools.6.0.8.nupkg 70 毫秒
- 已通过内容哈希 +wjKy16Vdz/ArHFvJZ1xXG241OZMFbTY0lS8vTQL4tfo8slX/h1J9PkzbWJjG6G7SMharUwvigIo+vrMO628Xg== 从 https://api.nuget.org/v3/index.json 安装 Microsoft.EntityFrameworkCore.Tools 6.0.8 。
- Install-Package : NU1202: 包 Microsoft.EntityFrameworkCore.Tools 6.0.8 与 netcoreapp3.1 (.NETCoreApp,Version=v3.1) 不兼容。 包 Microsoft.EntityFrameworkCore.Tool
- s 6.0.8 支持: net6.0 (.NETCoreApp,Version=v6.0)
- 所在位置 行:1 字符: 1
- + Install-Package Microsoft.EntityFrameworkCore.Tools
- + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- + CategoryInfo : NotSpecified: (:) [Install-Package], Exception
- + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
-
- Install-Package : 程序包还原失败。正在回滚“EFGetStarted”的程序包更改。
- 所在位置 行:1 字符: 1
- + Install-Package Microsoft.EntityFrameworkCore.Tools
- + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- + CategoryInfo : NotSpecified: (:) [Install-Package], Exception
- + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
-
- 已用时间: 00:00:05.5803966
- PM> Add-Migration InitialCreate
- Add-Migration : 无法将“Add-Migration”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
- 所在位置 行:1 字符: 1
- + Add-Migration InitialCreate
- + ~~~~~~~~~~~~~
- + CategoryInfo : ObjectNotFound: (Add-Migration:String) [], CommandNotFoundException
- + FullyQualifiedErrorId : CommandNotFoundException
-
- PM> Update-Database
- Update-Database : 无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
- 所在位置 行:1 字符: 1
- + Update-Database
- + ~~~~~~~~~~~~~~~
- + CategoryInfo : ObjectNotFound: (Update-Database:String) [], CommandNotFoundException
- + FullyQualifiedErrorId : CommandNotFoundException
-
- PM>
打开 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();
“调试”>“开始执行(不调试)”
