日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【.Net core】EFCore——Code First生成数据库与表

發布時間:2023/12/4 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【.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 參數是遷移名稱??梢允褂萌魏蚊Q,但是按照慣例,會選擇可說明遷移的名稱。因為這是首次遷移,所以生成的類包含用于創建數據庫架構的代碼。

  • 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_/\__---==/ \\___ ___ |. \|\| __|| __| | ) \\\| _| | _| \_/ | //|\\|___||_| / \\\/\\TOPICabout_EntityFrameworkCoreSHORT DESCRIPTIONProvides information about the Entity Framework Core Package Manager Console Tools.LONG DESCRIPTIONThis topic describes the Entity Framework Core Package Manager Console Tools. See https://docs.efproject.net forinformation 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 ALSOAdd-MigrationDrop-DatabaseGet-DbContextRemove-MigrationScaffold-DbContextScript-DbContextScript-MigrationUpdate-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

長按二維碼關注

總結

以上是生活随笔為你收集整理的【.Net core】EFCore——Code First生成数据库与表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。