Entity Framework Core 简明教程(1)
创始人
2025-06-01 08:24:47

示例程序基于 .NET 6,在 Visual Studio 2022 中进行程序编写。使用 Console 控制台应用程序。

创建工程

新建一个工程,选择工程的类型为 Console App:

将工程命名为 EFCoreTest:


点击【下一步】,使用 .NET 6.0 框架,这是一个长期维护的版本。如果已经熟悉顶级语句,可以不选中 Do not use top-level statement 选项。如果习惯了要看到 program.cs 文件中有 Main 方法,则选中:


完成:

安装 Entity Framework Core 相关包

Entity Framework Core 支持不同的数据库,比如 SQL Server, MySQL 等,要求不同的数据库厂商提供数据驱动程序。我们在本例中将使用 SQL Server LocalDB,这是一种基于文件的数据库,是 SQL Server 最精简的版本。安装 Visual Studio 的时候,可以选择同时安装这个精简的数据库。

通过菜单 Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution 进行可视化安装。

我们将按装如下两个 Package:


如果安装成功,这里显示了 Package 和版本:

定义实体类

在工程中新建一个 Models 文件夹,添加一个名为 Book 的实体类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace EFCoreTest.Models
{public class Book{public int Id { get; set; }public string Title { get; set; }public string AuthorName { get; set; }public DateTime PublishDate { get; set; }public double Price { get; set; }}
}

定义实体配置类

实体配置类的主要作用是设置实体与数据表映射的数据表相关属性。EF Core 按照约定大于配置的原则,提供了大量默认的配置,但如果需要更加个性的设置,则可以在实体配置类中进行。实体配置类需要实现 IEntityTypeConfiguration 接口。

重新编写 Configure 方法的代码如下:

namespace EFCoreTest.Models
{public class BookEntityConfig : IEntityTypeConfiguration{public void Configure(EntityTypeBuilder builder){builder.ToTable("T_Books"); // 指定 Book 对应的数据库表为T_Booksbuilder.Property(c=>c.Title).IsRequired().HasMaxLength(50);builder.Property(c=>c.AuthorName).IsRequired().HasMaxLength(20);}}
}

上面的代码比较直观,简单来说,对数据库表有如下配置:
1)数据库表名为 T_Books
2) Title 字段为必输字段,最大长度为 50
3)AuthorName 字段为必输字段,最大长度为 20

定义上下文类

EF Core 对数据库的操作需要通过继承自 DbContext 的类来进行。DbSet 类代表对应的数据库表。在 Models 文件夹下,创建名为 BookDbContext 的类,继承自 DbContext:


我们需要 override DbContext 的两个方法,在 OnConfiguring 方法中设置连接字符串,并且根据该连接字符串配置,连接到相应数据库:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{// 连接字符串string connStr = "Server=(localdb)\\ProjectModels;Database=BookDb;Trusted_Connection=True";optionsBuilder.UseSqlServer(connStr);
}

这里,连接字符串要有实际存在的数据库与之对应,通过菜单 View -> SQL Server Object Explorer 菜单,可以看到该数据库:

改写 OnModelCreating 方法:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{base.OnModelCreating(modelBuilder);// 加载当前Assemby所有实现了IEntityConfiguration的类modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
}

数据库迁移

通过菜单 Tools -> NuGet Package Manager -> Package Manager Console 打开命令行界面:

执行 Add-Migration 命令:


执行该命令后,在工程中生成数据库迁移的脚本,InitialCreate 是数据迁移的名称,该名称表示这是第一次迁移。此时还没有作用于实际的数据库。


接下来,运行 Update-Database 命令,生成实际的数据表:


相关内容

热门资讯

传播学理C7娱乐有辅助挂吗(辅... 亲,C7娱乐这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总...
分享知识储备[WePOKer]... 亲,[WePOKer]这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,[WePOK...
我会分享学习经验六趣游有辅助挂... 您好:六趣游有辅助挂吗(辅助挂),原来有人用挂(2025最新方法),确实是有挂的,很多玩家在这款游戏...
提供课程创新姚记大菠萝十三水有... 1. 无需人工智能权限即可帮助您快速完成GG Poker计算辅助教程,并沉浸在游戏中。2. 整个GG...
散播智慧心悦海南有挂吗可以用吗... 有过。亲爱的,欢迎您访问我们的网站。根据老记者透露的信息,心悦海南这款游戏是可以被骗的。果然有诈。不...