ORM系列之二:EF(2)Code First


 

目錄

1. Code First是什么?

2. Code First 簡單示例

3. 數據存儲

4. 遷移

 

Code First是什么

  Code First 顧名思義就是先寫代碼,當然不是亂寫,而是按照一定的約定,先創建實體類,再通過編輯器自動生成數據模型。Code FirstEF的三大模式之一,主要使用新的系統開發,對應數據庫已存在的情況下不適合。 

 

Code First 簡單示例  

  下面通過一個簡單的示例,讓我們來熟悉一下Code First模式。 

  第一步:創建一個控制台程序,命名為EF.CodeFirstSample”。

  

  第二步:打開NuGet包管理界面,為上面新建的控制台程序安裝EF

   

  安裝成功之后,我們就可以在引用下面看到EF組件,如下圖:

   

  第三步:創建模型

   該示例中我們使用非常簡單的模型,直接Program.cs文件中進行定義。

   Program.cs中添加以下兩個類:   

public class Blog
    {
        public int BlogId { get; set; }
        public string Name { get; set; }

        public virtual List<Post> Posts { get; set; }
    }

    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }

        public int BlogId { get; set; }
        public virtual Blog Blog { get; set; }
    }
View Code

   第四步:創建上下文

  創建一個上下文,用於和數據庫保持會話,以便我們查詢和保存數據。我們定義一個派生自System.Data.Entity.DbContext的上下文,並為模型中每個類公開一個類型化DbSet<TEntity> 

 public class BloggingContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }
    }
View Code

  第五步:讀寫數據

  實現program.cs中的Main方法,如下所示,這些代碼為上下文創建一個新的實例,然后使用該實例為Blog表插入一條記錄,然后在從數據庫讀取所有的Blog,並且把名稱顯示出來,具體代碼如下: 

 static void Main(string[] args)
        {
            using (var db = new BloggingContext())
            {
                Blog blog = new Blog() { Name = "this is a test Name!" };
                db.Blogs.Add(blog);
                db.SaveChanges();

                foreach (var item in db.Blogs)
                {
                    Console.WriteLine("Name:"+item.Name);
                }               
            }

            Console.Read();
        }
View Code

   

  運行結果

  

  運行結果顯示,我們已經成功添加一條數據,並且成功讀取顯示出來,那我們的數據存儲在哪里呢?

 

  數據在哪里

  如果本地Sql EXPRESS實例可用(默認情況下隨vs2010安裝)的話, 則Code First默認對該實例創建數據庫;

  如果Sql EXPRESS實例不可用,則Code First將嘗試使用LocalDb(默認情況下隨vs2012安裝);

  如果Sql EXPRESS和LocalDb同時存在,則Code First會優先使用Sql EXPRESS;

  如果兩個都不存在,則運行就報錯,所以需要自己在配置文件設置數據庫連接字符串。

 

  由於我們只有LocalDb可用,所以運行之后在LocalDb中自定創建一個新的數據庫和物理表,如下:

  

     

      數據遷移

  在實際開發中經常會設計表之后再修改表結構,那么對於Code First中修改表又是如何實現的呢?例如,現在為Blog類增加一個Url屬性,如下:

   

 

      再運行程序,會發現如下提示:

  

   提示信息非常明確,這個時候通過遷移來更新數據庫。  

  第一步:打開NuGet控制台,輸入"Enable-Migrations"啟用Code First遷移。

  

  第二步:在控制台中輸入“Add-Migration AddUrl”,其中AddUrl是遷移的名稱,方便以后根據這個名稱進行降級。

  

  第三步:在控制台中輸入“Update-Database”,這個時候可能會因為當前項目不是啟動項而報錯,我們可以執行Update-Database的時候指定啟動,這么我只是簡單的將當前項目設置為啟動項。

  

  至此,遷移工作完成,此時我們查看數據庫會發現,Blog表中已經增加了URL字段,見下圖:

  

 


免責聲明!

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



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