以前做的项目都是先有数据库,没有机会用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
这样就完成了整个从代码同步到数据库的过程。