EF
EF6
C#
Migration
前言
本人在阿里雲申請了個免費的空間,之前已經存放了一個項目,由於之前一直沒時間,近期比較有空,所以想開發個個人博客,但是由於阿里雲沒有給我們權限來新建數據庫,因此只能在原有的數據庫另外“瓜分”一部分空間來做個人博客的數據庫,我是在之前的JackSite.Entities實體項目上開發,因此只需要在定義一個DbContext即可。
PS:本次討論的使用范圍:通過EF6(低版本是否支持多數據上下文我並不了解)用一個數據庫構造多個DbContext
實現目標
原本默認Migration的文件是在Migrations,我現在希望已如下的形式來存放
在Migrations項目中添加文件夾AMigration,BMigration文件來區分不同的DbContext遷移文件。
設置多數據上下文
首先我查找了下資料並未發現有類似Move-Migrations
或者Update-Migrations
的命令,因此我設想是是否同樣是通過Enable-Migrations
進行設置
通過google 搜索關鍵字Single Database Multiple DbContext 搜到確實和我想象的一致都是通過此命令來設置多個數據庫上下文的遷移文件路徑 在抱着試試看的態度,進行了如下命令輸入:
Enable-Migrations -ContextTypeName:JackSite.Entities.Models.StudyTime.JackDbContext -MigrationsDirectory:Migrations\StudyTimeMigrations
ContextTypeName:DbContext的位置,即DbContext的命名空間加上DbContext的名稱
MigrationsDirectory:需要遷移到的目標文件夾
PS:注意MigrationsDirectory:Migrations\StudyTimeMigrations
中的'\'不要打錯如輸成'/'可能會引發一些問題
同樣我們對另一個數據上下文進行設置
Enable-Migrations -ContextTypeName:JackSite.Entities.Models.Blog.BlogDbContext -MigrationsDirectory:Migrations\BlogMigrations
PS:這里兩個DbContext用的是同樣的連接串
更新數據腳本
最后通過運行Add-Migrations
命令
這里需要注意:如果我們只有一個數據上下文,通過
Add-Migrations
命令會自動選擇唯一的DbContext,但是如果有多個DbContext,我們必須指定我們需要對那個DbContext進行修改
Add-Migration -ConfigurationTypeName JackSite.Entities.Migrations.BlogMigrations.Configuration InitBlogDb
這里通過-ConfigurationTypeName
指定Configuration 后面接着是Configuration的路徑,然后接着是我們取得名字InitBlogDb
EF會找到指定的Configuration,並添加XXXX_InitBlogDb,結構如下圖所示:
最后通過Update-Database
進行更新
同樣,我們這里需要指定需要更新哪個Configuration
Update-Database JackSite.Entities.Migrations.BlogMigrations.Configuration
參考資料
Entity Framework 6 Code First Migrations with Multiple Data Contexts