将创建一个 .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)” ,然后单击“下一步”
要安装 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();
“调试”>“开始执行(不调试)”