使用CodeFirst實現動態建庫,codefirst動態建庫
在項目ITOO3.0中,有一個技術點是動態建庫建表。簡單的解釋一下,就用一個用來來註冊我們高校雲平台系統的時候,我們會動態為他建立一整套ITOO的後台資料庫。好了,項目背景理清楚了,下面是具體的實現過程。
一、業務分析
以我們平時註冊今目標為例,我們在註冊今目標的過程中,具體步驟是這樣的:
圖1 今目標登陸流程
詳細解釋一下:
第一步:註冊介面。輸入手機號或者郵箱,點擊確定進入基本資料介面。
第二步:基本資料。完善使用者的基本資料,點擊註冊完成註冊。其中我們要說的建庫建表就是這這一步實現的
第三步:完成資訊。使用者完成註冊後,彈出提示框,告知使用者自己被分配的企業號,帳號和密碼。
二、代碼設計
首先,我們使用.NET MVC + EF架構,先建立三個介面。
圖2 建立三個介面
其次,根據資料庫產生CodeFirst代碼。如果我們要自己寫CodeFirst代碼,會十分麻煩,而且類之間的聯絡不容易把握。貼心的微軟為我們從資料庫產生CodeFirst代碼提供了一個很好的外掛程式:Entity Framework Power Tools Bata 4,開啟VS ==> 工具 ==> 擴充和更新,聯機搜尋一下就可以了。
圖3 Entity Framework Power Tools Bata 4外掛程式安裝
安裝好之後,建立一個類庫或者在原類庫上右擊,會有多了一個EntityFramework選項(沒有的重啟下VS),然後選擇Reverse Engineer Code First選項,會彈出我們熟悉的串連資料庫的彈出框,點擊確定會自動根據資料庫建立出CodeFirst代碼,非常方便。
圖4-1 產生CodeFirst代碼
圖4-2 串連資料庫屬性
圖4-3 從資料庫產生CodeFirst代碼
最後,就是在代碼中實現資料庫的自動建立了,就是我們在點擊註冊按鈕動態產生一整套資料庫的操作,這裡只給大家展示了動態建庫的關鍵代碼。
這一步要做兩件事情:
1.修改EF內容相關的建構函式為資料庫連接字元床,因為預設是從設定檔讀取的。
namespace DbFristModel.Models{ public partial class ModelTestContext : DbContext { static ModelTestContext() { Database.SetInitializer<ModelTestContext>(null); } //修改上下文預設建構函式 public ModelTestContext(string connectionString) : base(connectionString) { //判斷上下文中是否存在連接字串中的資料庫,存在則串連,不存在則自動建立 this.Database.CreateIfNotExists(); } public DbSet<Class> Classes { get; set; } public DbSet<Student> Students { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new ClassMap()); modelBuilder.Configurations.Add(new StudentMap()); } }}
2.在點擊註冊按鈕的時候動態建庫,Controller中的代碼:
//連接字串 string connectionString = "Data Source=.; User=sa;Password=123456;Initial Catalog=" + db.DbName + ";Integrated Security=True"; ModelTestContext newDB = new ModelTestContext(connectionString);
至此,我們動態建庫的關鍵代碼都已經實現了,要給大家說明的一點是,資料庫的名字是許可權系統的資料庫ID+學校代碼自動產生的,所以每次註冊我們都能夠產生不同的資料庫。
效果展示:
圖5 動態建立的資料庫
以上就是小編對使用CodeFirst實現動態建庫基本瞭解,如果您也遇到類似需求,歡迎多多交流。