生成数据库表有下面的三种方式:
- 代码生成。
- 程序包管理器控制台迁移。
- 命令行迁移。
下面分别介绍上面的三种方法。以下示例均采用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
更多分享,请大家关注我的个人公众号:
标签:代码生成,CodeFirst,数据库,System,EntityFrameworkCore,using,public From: https://www.cnblogs.com/fei686868/p/16638829.html