以前做的項目都是先有數據庫,沒有機會用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
這樣就完成了整個從代碼同步到數據庫的過程。