程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 使用CodeFirst實現動態建庫

使用CodeFirst實現動態建庫

編輯:DB2教程

使用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(null);
        }

        //修改上下文默認構造函數
        public ModelTestContext(string connectionString)
            : base(connectionString)
        {            
            //判斷上下文中是否存在連接字符串中的數據庫,存在則連接,不存在則自動創建
            this.Database.CreateIfNotExists();
        }

        public DbSet Classes { get; set; }
        public DbSet 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 動態創建的數據庫

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved