天天看點

【.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/

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

微信公衆号

掃描下方二維碼關注個人微信公衆号,實時擷取更多幹貨

【.Net core】EFCore——Code First生成資料庫與表

同步更新至:http://www.randyfield.cn/

出處:http://www.cnblogs.com/RandyField/

本文版權歸作者和部落格園共有,未經許可禁止轉載,否則保留追究法律責任的權利,若有需要請聯系[email protected].