Entity Framework Core 简明教程(1)

示例程序基于 .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<Book>
    {
        public void Configure(EntityTypeBuilder<Book> builder)
        {
            builder.ToTable("T_Books"); // 指定 Book 对应的数据库表为T_Books

            builder.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 命令,生成实际的数据表:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值