EF Core 实战教程(一)配置环境及使用code first 创建数据库
小白浏览:6012022-09-16 20:00:09本文累计收益:0我也要赚钱

今天正式开始学习ef core,将学习经验分享到这里,供以后浏览复习使用。本文从新建一个项目开始介绍ef core的使用方法,主要讲解需要nuget哪些包,已经如何引用,及使用code first完成数据库的创建。首次创建将自动创建数据库,数据库名称根据数据库连接里面的名称指定。

一、创建项目

新建一个Asp.net core web应用项目,具体步骤这里不再介绍。

二、引入所需要的包

需要引入Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools两个包,SqlServer是核心实现类,Tools主要用于生成数据库表。

引入方法如下:在Vs中打开工具》NuGet包管理器》程序包管理控制台菜单,打开程序包管理器控制台。

分别输入如下命令,完成依赖包的引入:

1
2
PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer
PM> Install-Package Microsoft.EntityFrameworkCore.Tools
三、编写code first代码

本文创建一个Advanced11数据库,数据库需要自己通过数据库客户端创建,然后通过代码创建Books及Persons两个数据表,主要完成步骤包含三步,第一步写Books及Persons实体类、第二步通过Fluent Api进行实体配置,主要配置实体类如何映射到数据表,第三步创建DbContext数据库上下文。所有代码在Models文件夹下面创建。

1、实体类代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Book
{
    public long Id { get; set; }
    public string Title { get; set; }
    public DateTime PubTime { get; set; }
    public double Price { get; set; }
    public string AuthorName { get; set; }
}
public class Person
{
    public long Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string? Sex { get; set; }
}
2、创建Fluent Api实体配置类代码

实体配置类代码如下实现IEntityTypeConfiguration<T>接口,并实现Configure方法,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class BookConfig : IEntityTypeConfiguration<Book>
{
    /// <summary>
    /// 约定大于配置
    /// </summary>
    /// <param name="builder"></param>
    public void Configure(EntityTypeBuilder<Book> builder)
    {
 
        builder.ToTable("Books");//映射数据库到表名
        builder.Property(x => x.Title).HasMaxLength(200).IsRequired();//长度
    }
}
 
public class PersonConfig : IEntityTypeConfiguration<Person>
{
    public void Configure(EntityTypeBuilder<Person> builder)
    {
        builder.ToTable("Persons");
    }
}
3、创建DbContext上下文
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class TestDbContext:DbContext
{
    //映射到数据库表名
    public DbSet<Book> Books { get; set; }
    public DbSet<Person> Persons { get; set; }
    public DbSet<Dog> Dogs { get; set; }
 
    /// <summary>
    /// 重写OnConfiguring实现数据库连接
    /// </summary>
    /// <param name="optionsBuilder"></param>
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        base.OnConfiguring(optionsBuilder);
        optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=Advanced11;Persist Security Info=True;User ID=sa;Password=*******");
    }
    /// <summary>
    /// 加载第二步的Fluent Api实体配置
    /// </summary>
    /// <param name="modelBuilder"></param>
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        //从指定程序集里面添加实体配置类
        modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
    }
}

至此代码已经完成,截止目前项目结构如下:

四、生成数据库表

在程序包管理器控制台,Add-Migration、Update-database两个命令即可,如果想修改数据表的相关信息,比如增加、修改、删除列,直接操作上面的实体类或者配置类即可,每次修改完成后都需要执行这两个命令。Add-Migration命令格式如下:Add-Migration +修改表描述名称

具体命令如下:

1
2
PM> Add-Migration init
PM> Update-database

init为定义名称。

至此数据库创建完成,如下图:

微信扫一扫,欢迎进群交流:

附:Fluent Api常用配置

1
2
3
4
5
6
7
8
9
10
11
12
13
public void Configure(EntityTypeBuilder<Book> builder)
{
    builder.ToTable("Books");//映射数据库到表名
    builder.HasKey(x => x.Id);//主键
    builder.Property(x => x.Title).HasMaxLength(200).IsRequired();//长度
    builder.Ignore(x=>x.PubTime);//忽略创建到数据库
    builder.Property(x=>x.Title).HasColumnName("STitle");//指定数据库列名
    builder.Property(x => x.Title).HasColumnType("varchar(200)");//指定数据库列类型
    builder.Property(x => x.Title).HasDefaultValue("测试文章");//设置默认值
    builder.HasIndex(x => x.Id);//设置索引
    builder.HasIndex(x => new { x.Id, x.AuthorName });//设置符合索引
    builder.HasIndex(x => x.Id).IsUnique();//唯一索引
}

 

评论列表
发表评论
+ 关注