使用CodeFirst實現動態建庫

周江霄發表於2015-05-27

    在專案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實現動態建庫基本瞭解,如果您也遇到類似需求,歡迎多多交流。




相關文章