【.Net core】EFCore——Code First生成數據庫與表


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 遷移所做的架構更改。
  • 如果是數據庫更新,會生成如下警告(可以忽略):
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/

https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mvc-app/adding-model?view=aspnetcore-3.1&tabs=visual-studio


作者:Garfield

同步更新至個人博客:http://www.randyfield.cn/

本文版權歸作者所有,未經許可禁止轉載,否則保留追究法律責任的權利,若有需要請聯系287572291@qq.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM