Entity Framework Core 简明教程(1)
创始人
2025-06-01 09:22:04
0

示例程序基于 .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 命令,生成实际的数据表:


相关内容

热门资讯

《不显名大檀越请偈》 《不显名大檀越请偈》 释慧远 宋代 释慧远 单提直指若为参,贝叶灵文满宝函。无我无人无寿者,...
《赠茂伯王孙》 《赠茂伯王孙》 程可中 明代 程可中 云孙几叶忆高皇,社土千秋表旧疆。周礼未应俱在鲁,汉臣今...
《灰洞》 《灰洞》 范成大 宋代 范成大 塞北风沙涨帽檐,路经灰洞十分添。据鞍莫问尘多少,马耳冥蒙不见...
《白石山》 《白石山》 叶原贺 宋代 叶原贺 云梯连石磴,香树锁松关。林壑疑无路,神仙别有山。 《白石山...
《书怀》 《书怀》 刘幽求 唐代 刘幽求 心为明时尽,君门尚不容。田园迷径路,归去欲何从。 《书怀》刘...
《四时白纻歌 春白纻》 《四时白纻歌 春白纻》 沈约 南北朝 沈约 兰叶参差桃半红。飞芳舞縠戏春风。如娇如怨状不同。...
《长命女》 《长命女》 冯延巳 五代 冯延巳 春日宴,绿酒一杯歌一遍。再拜陈三愿:一愿郎君千岁,二愿妾身...
《寄程鹏飞》 《寄程鹏飞》 刘过 宋代 刘过 往事游边忆少年,未尝携刺五侯门。春风跃马汉南道,落日椎牛淮上...
《夜香》 《夜香》 陆游 宋代 陆游 投老误乘传,窃食惭无功。清夜一炷香,实与天心通。忤物虽至愚,许国...
《月上瓜洲·寓乌夜啼南徐多景... 《月上瓜洲·寓乌夜啼南徐多景楼作》 张辑 宋代 张辑 江头又见新秋。几多愁。塞草连天何处、是...
《竹枝词二首》 《竹枝词二首》 黄庭坚 宋代 黄庭坚 撑崖拄谷蝮蛇愁,入箐攀天猿掉头。鬼门关外莫言远,五十三...
《寄魏景山》 《寄魏景山》 方回 宋代 方回 长桥身作长城梦,南五湖天北济淮。重听吴歈怜我老,忆骑塞马与君...
《金釜山灵泉》 《金釜山灵泉》 吴宗旦 宋代 吴宗旦 泉来有脉去无痕,水底神龙暗吐吞。莫怪一池杯样小,个中风...
《林若愚七十》 《林若愚七十》 陈藻 宋代 陈藻 思我从网山,问道红泉市。托翁自渔溪,饷我百余里。数穷初值变...
《村晚》 《村晚》 张耒 宋代 张耒 深坞繁花丽,晴田细径分。孤舟春水路,芳草夕阳村。暗雀投檐静,昏鸦...
《合江亭》 《合江亭》 李恭 宋代 李恭 一丝风下碧云天,亭上窗开霁色鲜。严子钓台青树里,桐君丹灶白云边...
坎儿井组诗现代诗歌 坎儿井组诗现代诗歌  (一)  穿越千里  婉如玉带  你从那天际雪山起步  携历史的一路尘埃  涓...
《落第》 《落第》 孟郊 唐代 孟郊 晓月难为光,愁人难为肠。谁言春物荣,独见叶上霜。雕鹗失势病,鹪鹩...
《题卢州郡斋》 《题卢州郡斋》 郑綮 唐代 郑綮 九衢尘里一书生,多达逢时拥旆旌。醉里眼开金使字,紫旂风动耀...
《太白楼》 《太白楼》 文天祥 宋代 文天祥 高城蘸云根,聊可慰心迹。长风万里来,如对骑鲸客。监州好事者...