文章出處

回到目錄

我為什么會來

在傳統的大型系統設計中,數據庫建模是個比開發更早的環節,先有數據庫,然后是ORM模型,最后才是開發程序,而這種模型在EF出現后發生了轉變,而且有可能將來會被code first取代,因為你的關系型數據庫沒有必要定死,你在部署網站時,沒人愿意先建立一大堆SQL語句,誰都愿意在IIS上運行后,數據庫自動生成,無論是sqlserver,orcale,mysql它如果都是自動生成,那該多爽!事實上,這種開發模型已經愉愉的進入了我們的世界里,尤其是在第三方服務器部署時,這種code first讓你感覺更加方法,應該你不用在一個個建立數據表了,像香港云這種第三方服務器,普通用戶不支持SQL命令,建立表只能一個一個的建立。

數據初始化

而當你的數據庫被建立后,數據表的信息也可以同時被初始化的,這也是今天要說的,它分于兩叔,第一在config里開啟這個初始化功能,第二建立自己的Initializer類,讓它實現DropCreateDatabaseIfModelChanges<YourContext>泛型方法即可,具體看一下代碼

一 配置啟用,將web.config里的entityFramework改這樣

<entityFramework>
    <contexts>
      <context type="Lind.DDD.Manager.ManagerContext, Lind.DDD.Manager">
        <databaseInitializer type="Lind.DDD.Manager.ManagerInitializer, Lind.DDD.Manager" />
      </context>
    </contexts>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v12.0" />
      </parameters>
    </defaultConnectionFactory>

  </entityFramework>

二 編寫初始化類代碼

    /// <summary>
    /// 數據庫初始化
    /// </summary>
    public class ManagerInitializer : DropCreateDatabaseIfModelChanges<ManagerContext>
    {
        protected override void Seed(ManagerContext context)
        {
            try
            {
                #region 部門表
                var department = new WebDepartments
                {
                    About = "",
                    DepartmentName = "公司",
                    DeptLevel = 0,
                    Operator = "admin",
                    ParentID = null,
                    SortNumber = 0,
                    Status = 1,
                    UpdateDate = DateTime.Now,
                };
                context.WebDepartments.Add(department);
                context.SaveChanges();
                #endregion

                #region 菜單表
                var menu = new WebManageMenus
                {
                    About = "",
                    LinkUrl = "",
                    MenuLevel = 1,
                    MenuName = "",
                    Operator = "admin",
                    ParentID = null,
                    SortNumber = 0,
                    Status = 1,
                    UpdateDate = DateTime.Now,
                };
                context.WebManageMenus.Add(menu);
                context.SaveChanges();
                #endregion

                base.Seed(context);
            }
            catch (Exception)
            {

                throw;
            }


        }
    }

感謝各位的閱讀,希望本文章可以幫到您!

回到目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()