Entity Framework Core入门(看不懂,不掌握)

13 篇文章 0 订阅

将创建一个 .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”作为名称,然后单击“创建”

 

安装EntityFramework 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<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; }
}

 

创建数据库

使用迁移创建数据库。

在“包管理器控制台(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();

运行应用

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值