net6 Mysql CodeFirst 配置和创建更新数据库


以前做的项目都是先有数据库,没有机会用Codefisrt,当然肯定有方法解决这类问题,只是我没有研究过。

 

第一次使用CodeFirst方式做项目。记下几个概念和操作,备查。

一、 在ef core中,管理数据库架构的方法:code-first 和 database-first 分别称为:迁移和反向工程。

迁移是以 EF Core 模型为准,以增量方式将相应架构更改应用到数据库,以使数据库保持与 EF Core 模型兼容。

反向工程以数据库架构为准,通过将数据库架构反向工程到 EF Core 模型来生成相应的 DbContext 和实体类型。

 

二、以连接到Mysql为例,在Net6中如何配置efcore

1. 首先引入相应的包:

Install-Package Microsoft.EntityFrameworkCore -version 6.0.1 
Install-Package Microsoft.EntityFrameworkCore.Tools -version 6.0.1

2. Mysql引入:

Install-Package Pomelo.EntityFrameworkCore.MySql -version 6.0.0

 

3. 编写实体类 - User

查看代码
    [Table("User")]
    public class User
    {
        [Key]
        [MaxLength(255)]
        public string id { get; set; }

        [MaxLength(255), Required]
        public string name { get; set; }

        [MaxLength(255), Required]
        public int age { get; set; }

        [MaxLength(255), Required]
        public string email { get; set; }

        [MaxLength(255), Required]
        public string password { get; set; }

        [MaxLength(255), Required]
        public DateTime datCreate{ get; set; }

        [MaxLength(255), Required]
        public string salt { get; set; }

        [MaxLength(255)]
        public string showName { get; set; }

        [MaxLength(255)]
        public string displayName { get; set; }

        public int point { get; set; }

    }

 

4. 编写UserDbContext:

查看代码
public class UserDbContext : DbContext
    {
        public DbSet<User> Users { get; set; }

        /// <summary>
        /// 一定要有默认构造方法,否则在生成migration时会报错。
        /// </summary>
        public UserDbContext() : base()
        {

        }
        public UserDbContext(DbContextOptions<UserDbContext> options)
        : base(options)
        {

        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            //如果为实体类单独建了类库,需要在此处配置数据库连接。
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseMySql("Server=yourserver;Port=yourport;Database=yourdatabasename;Uid=youruser;Pwd=yourpwd;", ServerVersion.AutoDetect("Server=yourserver;Port=yourport;Database=yourdatabasename;Uid=youruser;Pwd=yourpwd;"));
            }

            optionsBuilder.UseLazyLoadingProxies(false);
        }
    }

 

5.net6的注入和管道:

在net6中,由于顶级语句(Top-Level Program)会极大简化入口文件的内容和编程方式。以致第一次看到会有些摸不着头脑。

现在“WebApplication.CreateBuilder()”方法,会创建一个WebApplicationBuilder类型的对象。

此对象中有:

builder.Services - 对应原“ConfigureServices”方法

builder.Configuration - 老版本Ioc进来的配置对象

builder.Environment - 环境对象

 

配置好builder后,build一个WebApplication对象,即可对管道进行配置,一如老版本“Configure方法”

 

6.我们还是把要引入的类库卸载文件顶部

using Microsoft.EntityFrameworkCore;
using Zodiac.Data.DAL;
using Zodiac.Data.DAL.DbContexts;

在创建Builder后,配置Services

var builder = WebApplication.CreateBuilder(args);

......
  
builder.Services.AddDbContext<UserDbContext>(options => options.UseMySql(builder.Configuration.GetConnectionString("Default"), ServerVersion.AutoDetect(builder.Configuration.GetConnectionString("Default"))));

 7.创建初始Migration

//Visual Studio
Add-Migration InitialCreate

//Net Core CLI
dotnet ef migrations add InitialCreate

执行成功后可以看到生成的migration文件

8.更新migration

//Visual Studio
Update-Database
//Net Core CLI
dotnet ef database update

 

这样就完成了整个从代码同步到数据库的过程。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM