使用CodeFirst創建數據庫


CodeFirst的意思是根據EF實體類創建對應的數據結構,創建過程由DotNet框架自己完成,程序員可以部分干涉。

1.CodeFirst數據庫策略

   CreateDatabaseIfNotExists:默認的策略:如果數據庫不存在,那么就創建數據庫。但是如果數據庫存在了,而且實體發生了變化,就會出現異常。

   DropCreateDatabaseIfModelChanges:此策略表明:如果模型變化了,數據庫就會被重新創建,原來的數據庫被刪除掉了。

   DropCreateDatabaseAlways:此策略表示:每次運行程序都會重新創建數據庫,這在開發和調試的時候非常有用。

2.使用EF讀取數據時創建數據

   步驟如下:

   1)創建項目

   2)添加EF實體類

   3)添加DbContext派生類

        首先要引入EntityFramework程序包,可以使用NuGet控制台命令:Install-Package EntityFramework -Version 5.0.0。

        然后定義派生類,可以在構造函數或者app.config/web.config中定義數據庫策略。

        構造函數定義:

 1 public class BloggingContext : DbContext  2 {  3 public BloggingContext()  4 : base("TestEFConnection")  5  {  6 //代碼優先數據庫策略  7 //默認的策略:如果數據庫不存在,那么就創建數據庫。但是如果數據庫存在了,而且實體發生了變化,就會出現異常。  8 Database.SetInitializer(new CreateDatabaseIfNotExists<BloggingContext>());  9  } 10 11 public DbSet<Blog> Blogs { get; set; } 12 public DbSet<Post> Posts { get; set; } 13 }
View Code

        Web.config定義:

        添加到appSettings節點

        <add key="DatabaseInitializerForType Ebuy.Website.Models.EbuyDataContext,Ebuy.Website"          value="System.Data.Entity.CreateDatabaseIfNotExists`1[[TestEF.TestCodeFirst.BloggingContext,TestEF.TestCodeFirst]],EntityFramework" />

        TestEF.TestCodeFirst.BloggingContext:表示完整的類名稱,TestEF.TestCodeFirst:表示類所在程序集

        注意:以上兩種選擇其一即可!

        禁止數據庫策略:

        <add key="DatabaseInitializerForType TestEF.TestCodeFirst.BloggingContext, TestEF.TestCodeFirst" value="Disabled" />   

        此配置將禁止應用CodeFirst創建數據庫!

   4)讀取數據(創建數據庫)

        運行程序使用EF上下文(DbContext派生類),讀取或者寫入數據到實體對象,提交數據后EF會根據數據庫策略刪除或創建數據庫。

    注意:最好明確指定數據庫連接名稱(DbContext派生類構造函數中指定),否則因各自安裝數據庫組件的不同,可能得到的並不是預期效果。

    官方說法是:

    如果本地 SQL Express 實例可用(默認情況下隨 Visual Studio 2010 安裝),則 Code First 對該實例創建數據庫

    如果 SQL Express 不可用,則 Code First 將嘗試使用LocalDb(默認情況下隨 Visual Studio 2012 安裝)創建數據庫

3.使用Migration相關命令主動遷移數據

   CodeFirst模式默認使用CreateDatabaseIfNotExists策略,因此開發過程中常常遇到”數據結構已更改,需要更新數據”的錯誤提示,這時候就要使用Code First遷移。

   遷移命令以下部分組成:

   Enable-Migrations:啟動CodeFirst數據遷移,第一次遷移會創建Migrations文件夾,包括:Configuration.cs,<時間戳>_InitialCreate.cs(當前數據庫不存在時,不會創建此文件)。

   Add-Migration:命令檢查自上次遷移后是否有更改,並使用所有更改搭建新遷移,可以為遷移指定名稱。

   Update-Database:此命令將所有掛起的遷移應用於數據庫

   1)已有當前數據庫

   使用上面介紹的步驟創建數據庫后,CodeFirst會在當前數據庫__MigrationHistory表中添加遷移記錄,如:

  

   使用Enable-Migrations命令初始化CodeFirst時,將在項目文件夾Migrations中創建MigrationId對應的文件。

    

  

   如果實體模型改變了,那么使用Add-Migration [遷移文件名] 命令可以生成待遷移文件,最后使用Update-Database命令提交改變。

  

   2)沒有當前數據庫

   》執行Entity-Migrations,創建Migrations文件夾(只包括Configuration.cs)

  

  

   》執行Add-Migration [遷移文件名]

  

  

   》執行Update-Database創建數據庫

  

 

  》查詢數據庫:select * from __MigrationHistory,會發現遷移記錄,MigrationId就是項目中對應的遷移文件名。

 

 

引用:https://msdn.microsoft.com/zh-cn/data/jj193542 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM