Code First——領域設計模式中非常有用。使用 Code First 模式,專注於領域設計,創建領域類,然后生成數據庫。
1.創建數據模型類
一般就是數據庫里面有哪些表,就創建哪些模型, POCO 類就夠了。
public partial class SmsPush
{
[Key]
public int Id { get; set; }
[MaxLength(128)]
public string AppName { get; set; }
[DataType(DataType.Text)]
public string TargetValue { get; set; }
[DataType(DataType.Text)]
public string Content { get; set; }
[DataType(DataType.DateTime)]
public DateTime CreateTime { get; set; }
}
2.安裝 nuget 包
按您使用的數據選擇包
- sqlserver:
Install-Package Microsoft.EntityFrameworkCore.SqlServer
- mysql:
Install-Package MySql.Data.EntityFrameworkCore
3.創建數據庫上下文類
需要繼承DbContext
public class MvcMovieContext : DbContext
{
public MvcMovieContext (DbContextOptions<MvcMovieContext> options)
: base(options)
{
}
public DbSet<Movie> Movie { get; set; }
}
4.注冊數據庫上下文
在應用啟動過程中,EF core 數據庫上下文服務必須通過依賴注入注冊。需要服務,通過構造函數注入即可。
- sqlserver
services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
- mysql
services.AddDbContext<PushContext>(options =>
{
options.UseMySQL(Configuration.GetConnectionString("PushContext"));
});
5.添加數據連接字符串
上面的Configuration.GetConnectionString
,是從appsettings.json
中讀取的。所以需要添加相關配置。由於使用的是 mysql,所以相關配置如下
{
"ConnectionStrings": {
"PushContext": "Persist Security Info=False;database=push-center;server=localhost;Connect Timeout=30;user id=root; pwd=111111"
}
}
mysql 鏈接字符串,參考 mysql 官方:https://dev.mysql.com/doc/dev/connector-net/8.0/html/P_MySql_Data_MySqlClient_MySqlConnection_ConnectionString.htm
6.安裝 Mysql
由於博主是在 windows 下開發,所以這里介紹最簡單的 windows 下安裝 mysql 的方法及后續相關操作。這里我們推薦使用巧克力安裝 mysql,一款越用越香的 windows 包管理器,如果不知道巧克力,請參考博文【Nginx】Nginx 部署實戰——靜態文件+反向代理+均衡負載+https+websocket,有關於巧克力的安裝,可以類比 centos 的黃狗(yum).
#安裝mysql
choco install mysql
#遇到讓你選擇是否運行腳本,Y/A 按着走
- 有可能會遇到在https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-winx64.zip下載巨慢的情況(在公司下載很快,晚上在家下載很慢,不知道為啥,想辦法吧),可以在巧克力執行
powershell
之前,也就是提示選擇他要執行C:\ProgramData\chocolatey\lib\mysql\tools\chocolateyInstall
腳本,去編輯這個腳本,替換為國內資源鏡像
#第三行
$url = 'https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-winx64.zip'
#替換為搜狐鏡像 類似還有
#網易 http://mirrors.163.com/
#中科大 http://mirrors.ustc.edu.cn/
#清華 https://mirrors.tuna.tsinghua.edu.cn/
$url = 'http://mirrors.sohu.com/mysql/MySQL-8.0/mysql-8.0.20-winx64.zip'
不出意外,mysql
就安裝好了,路徑C:\tools
,甚至相關 windows 服務也裝好了。根據之前的經驗【One by one 系列】一步步部署.Net core 應用-CentOs 介紹的 mysql 安裝后,初始化密碼
# 修改密碼
# 初次安裝mysql,root賬戶沒有密碼。直接登錄
mysql -u root
mysql>show databases;
mysql>set password for 'root'@'localhost' =password('設置你的密碼');
Query OK, 0 rows affected (0.00 sec)
#不需要重啟數據庫即可生效
上面是針對 5.6 以下的版本有效,通過巧克力默認安裝的是最新版本,是 8.0 版本,修改密碼的操作需要更換如下 sql 語句。
mysql -u root
#初始化root賬戶的密碼
mysql>ALTER USER root@localhost IDENTIFIED BY '123456';
7.初始遷移-Initial migration
運用 efcore 遷移功能來創建數據庫。migration 是可用於創建和更新數據庫以匹配數據模型的一組工具
#第一步
Add-Migration InitialCreate
#第二步
Update-Database
Add-Migration InitialCreate
:生成Migrations/{timestamp}_InitialCreate.cs
遷移文件 。InitialCreate
參數是遷移名稱。 可以使用任何名稱,但是按照慣例,會選擇可說明遷移的名稱。 因為這是首次遷移,所以生成的類包含用於創建數據庫架構的代碼。Update-Database
:將數據庫更新到上一個命令創建的最新遷移。 此命令運行在 Migrations/{time-stamp}_InitialCreate.cs 文件中Up
方法,用於創建數據庫的。- ps:
Up
方法創建 表。Down
方法可還原Up
遷移所做的架構更改。
- ps:
- 如果是數據庫更新,會生成如下警告(可以忽略):
No type was specified for the decimal column 'Price' on entity type 'Movie'. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using 'HasColumnType()'.
更多內容參考:https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/cli/powershell
8.依賴注入數據庫上下文
public class MoviesController : Controller
{
private readonly MvcMovieContext _context;
public MoviesController(MvcMovieContext context)
{
_context = context;
}
}
9.遷移回退
上面 migration 命令,主要依賴Microsoft.EntityFrameworkCore.Tools
包,如果此包缺失,請安裝。
#先檢查下
Get-Help about_EntityFrameworkCore
PM> Get-Help about_EntityFrameworkCore
_/\__
---==/ \\
___ ___ |. \|\
| __|| __| | ) \\\
| _| | _| \_/ | //|\\
|___||_| / \\\/\\
TOPIC
about_EntityFrameworkCore
SHORT DESCRIPTION
Provides information about the Entity Framework Core Package Manager Console Tools.
LONG DESCRIPTION
This topic describes the Entity Framework Core Package Manager Console Tools. See https://docs.efproject.net for
information on Entity Framework Core.
The following Entity Framework Core commands are available.
Cmdlet Description
-------------------------- ---------------------------------------------------
Add-Migration Adds a new migration.
Drop-Database Drops the database.
Get-DbContext Gets information about a DbContext type.
Remove-Migration Removes the last migration.
Scaffold-DbContext Scaffolds a DbContext and entity types for a database.
Script-DbContext Generates a SQL script from the current DbContext.
Script-Migration Generates a SQL script from migrations.
Update-Database Updates the database to a specified migration.
SEE ALSO
Add-Migration
Drop-Database
Get-DbContext
Remove-Migration
Scaffold-DbContext
Script-DbContext
Script-Migration
Update-Database
#上面是包沒問題的象征,如果有問題,再執行如下命令
Install-Package Microsoft.EntityFrameworkCore.Tools
To undo this action, use Remove-Migration.
# POCO類修改=>修改數據表
# 給本次遷移取一個名字:UpdateEditions,初始化取的名字:InitialCreate
Add-Migration UpdateEditions
# 更新
Update-Database
# 突然發現可能有影響,那就回滾吧,刪除上一次遷移(回滾針對遷移進行的代碼更改)
Remove-Migration
Remove-Migration
參數 | 說明 |
---|---|
-Force | 恢復遷移(回滾應用於數據庫的更改)。 |
參考鏈接
https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/cli/powershell
https://docs.microsoft.com/zh-cn/ef/core/
作者:Garfield
同步更新至個人博客:http://www.randyfield.cn/
本文版權歸作者所有,未經許可禁止轉載,否則保留追究法律責任的權利,若有需要請聯系287572291@qq.com