使用CodeFirst實現動態建庫,codefirst動態建庫

來源:互聯網
上載者:User

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




相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.