EF Core 实战教程(一)配置环境及使用code first 创建数据库
小白浏览:6242022-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包管理器》程序包管理控制台菜单,打开程序包管理器控制台。

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

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

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

1、实体类代码如下:
    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方法,具体代码如下:

    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上下文
    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 +修改表描述名称

具体命令如下:

PM> Add-Migration init
PM> Update-database

init为定义名称。

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

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

附:Fluent Api常用配置

        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();//唯一索引
        }

 

评论列表
发表评论
+ 关注