EntityFrameworkCore+CodeFirst:根据实体自动生成数据库(一) 代码生成

 

生成数据库表有下面的三种方式:

  1. 代码生成。
  2. 程序包管理器控制台迁移。
  3. 命令行迁移。

下面分别介绍上面的三种方法。以下示例均采用netcore3.1+mysql数据库

一、代码生成

该种方式比较简单,只适用于第一次生成,如果库中有表了,则生成失败。

这种只适用于一次性生成的,对于实际应用的项目,过程中会经常改变数据结构的,就不适合。

下面上示例
完整示例结构如下:

 

首先,我们创建一个实体类库  CodeFirst.Model
然后引入我们所需要的包

 

 创建实体

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;

namespace CodeFirstConsole
{
   public class Student
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //自增
        public int Id { get; set; }

        [DisplayName("姓名"),MaxLength(10)]
        public string Name { get; set;}
    }
}

第二步,创建数据库上下文类库  CodeFirst.DAL

引入我们所需要的包

 

 

 创建上下文类,把实体加入dbset

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System.IO;

namespace CodeFirst
{
    public class MyDbContext:DbContext
    {
        private IConfiguration configuration;


        public DbSet<Student> student { get; set; }
        public MyDbContext()
        {
            configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json").Build();
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseMySql(configuration.GetConnectionString("Default"));
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //在此处定义每个字段的长度以及各种限制或者在model实体上定义也可以,若两处都有定义,以此处为准
            modelBuilder.Entity<Student>(b =>
            {
                b.Property(c => c.Name).HasMaxLength(40);
            });
            base.OnModelCreating(modelBuilder);
        }
    }
}

 

最后一步,创建一个控制台应用程序 CodeFirstConsole

添加appsetting.json文件

{
  "ConnectionStrings": {
    "Default": "Data Source=127.0.0.1;Database=codefirst;User ID=root;Password=123456;pooling=true;CharSet=utf8mb4;port=3306"
  }
}

 

最后,在Programe.cs中执行数据库生成方法

using CodeFirstConsole.EntityFramework;
using System;

namespace CodeFirstConsole
{
    class Program
    {
        static void Main(string[] args)
        {

            MyDbContext dbContext = new MyDbContext();
            var flag=  dbContext.Database.EnsureCreated(); //创建数据库结构,成果返回true,否则返回false

            
            Console.WriteLine(flag);
            Console.WriteLine("Hello World!");
            Console.ReadKey();
            
        }
    }
}

关键在于执行dbContext.Database.EnsureCreated() 这句,就完成自动创建。

 

这种方式适用于数据结构不会再变,并且库结构还没建立的。

若库中已经有表存在,则创建失败,有新增的表或者字段变化都不会更新。

 

以上就是第一种代码生成的方式。

 

源代码:

链接: https://pan.baidu.com/s/1R_1cv3oRrcp7ZpQo5msCEQ 提取码: jc5d 复制这段内容后打开百度网盘手机App,操作更方便哦

 

参考文章:https://www.cnblogs.com/dotnet261010/p/12359767.html

 

更多分享,请大家关注我的个人公众号:

 

  

posted @ 2022-09-29 09:00  黄明辉  阅读(438)  评论(0编辑  收藏  举报