ASP .NET MVC 之Entity Framework- code first


最近,用到了ASP.NET  MVC Entity Framework  開發了一些項目,感覺還是非常好用了,這讓我見證了微軟技術的發展:

-通過這個圖,我們很清晰的看到,數據訪問方式的改變。

如果,你想了解,ADO.NET Entity Framework, 你可以直接訪問這個網站  Entity Framework

如果,你想了解ASP.NET MVC , 你可以直接訪問這個網站:MVC

下面我介紹一下Entity Framework 的一些運用:

 

在園子里,我看到很多關於MVC的講解,很多的用到的是Model First, or Schema First . 在這里,我將結合ASP.NET
MVC 3.0 ,
做一個Entity Framework CODE FIRST的演示,希望大家能有所幫助。特別是,對你想架構小型項目的時候,這個運用是非常有幫助的.

實驗環境:

OS: Windows Server 2008R2, Windows 7

DE: VS2010 + MVC 3.0+Entity Framework+ SQL Server 2008 R2

一、創建MVC
3.0
的網站項目,這和大家創建其他的MVC項目是一樣的。注意:在創建之前,記得先安裝MVC 3.0, Entity Framework. 創建完之后,你將會看到經典的MVC 模式,Model->View->Control

二、在Model中添加2個類,一個是Restaurant,一個是OdeToFoodDB,
定義如下:

Restaurant
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MVCET.Models
{
     public  class Restaurant
    {
         public  int ID {  getset; }
         public  string  Name {  getset; }
         public  string State {  getset; }
         public Adress  Adress {  getset; }
          
    }
}

 

OdeToFoodDB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace MVCET.Models
{
     public  class OdeToFoodDB:DbContext
    {        
         public DbSet<Restaurant> Restaurants {  getset; }
         public DbSet<Reviewers> Reviewer {  getset; }
    }
}

OdeToFoodDB, 注意這個類必須繼承 DbContext

然后,在webConfig中添加一個數據庫連接字符串,如下:

 <configuration>
  <connectionStrings>
    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
   
<add name="OdeToFoodDB"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;initial catalog=OdeToFoodDB;"
    providerName="System.Data.SqlClient"/>
  </connectionStrings>

三、在Control 中添加RestaurantControl 類,再為Index()函數添加View. 並且選擇強類型去顯示數據。這時候,view 會自動綁上數據,顯示數據。這時候,肯定沒有數據,如果要有數據怎么弄呢?這時候就到根據代碼生成數據庫。
四、在VS 中選擇服務器瀏覽器窗口,在數據庫的節點上選擇"Add Connection …." 中文版的就是“添加新的連接”。寫上數據庫的服務器名稱,在填上數據庫的名字,如下圖所示: 

點擊ok,然后創建數據庫,如果,有對話框彈出來,選擇"Yes" 就行了。這時候,系統就會自動生成數據庫了,如下圖所示

我們,看到Restaurants 表中的字段和我們定義的Restaurant中字段的名字基本類似的  
到現在為止,我們已經根據代碼結構生成了數據庫.但是,如果Restaurant 中的字段有所改變,怎辦辦呢?這時候,就要到Drop以前的數據庫,然后,重現建立數據庫 
五、類發生了改變,數據庫也發生對應的改變:
在Global.asax 中的 Application_Start() 函數中,添加以下的代碼

protected  void Application_Start()
        {
            //  Database.SetInitializer(new DropCreateDatabaseIfModelChanges<OdeToFoodDB>()); 
            Database.SetInitializer( new OdeToFoodDBInitializer()); 
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }

你也可以寫一個類繼承DropCreateDatabaseIfModelChanges<OdeToFoodDB>, 如下代碼所示,你就可以不用注釋的哪一行代碼了

OdeToFoodDBInitializer
public  class OdeToFoodDBInitializer :
        DropCreateDatabaseIfModelChanges<OdeToFoodDB>
    {
         protected  override  void Seed(OdeToFoodDB context)
        {
             base.Seed(context);

            context.Restaurants.Add(
                 new Restaurant()
                {
                    Name =  " qitian ",
                    Adress =  new Adress() { Street =  "  Nanjiang RD, MD ", City =  " Shanghai " }
                });

            context.Restaurants.Add(
                 new Restaurant()
                {
                    Name =  " haiyun ",
                    Adress =  new Adress() { Street =  "  Dongchuan RD, MD ", City =  " Shanghai " }
                });
            context.Restaurants.Add(
                 new Restaurant()
                {
                    Name =  " qitian ",
                    Adress =  new Adress() { Street =  "  Beijing RD, HF ", City =  " Guangdong " }
                });

            context.Restaurants.Add(
                 new Restaurant()
                {
                    Name =  " Lantian ",
                    Adress =  new Adress() { Street =  "  Wuhan RD, HF ", City =  " Guangdong " }
                });

            context.Reviewer.Add( new Reviewers() { 
            Name= " Tomin ", Sex= " Female "});
            context.Reviewer.Add( new Reviewers()
            {
              
                Name =  " Tony ",
                Sex =  " Male "
            });

            context.SaveChanges();
                
        }
    }

重新運行運用程序,會給你一個意想不到的結果,你會驚呆的。

MVCET.zip

 


免責聲明!

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



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