最近,用到了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.Collections.Generic;
using System.Linq;
using System.Web;
namespace MVCET.Models
{
public class Restaurant
{
public int ID { get; set; }
public string Name { get; set; }
public string State { get; set; }
public Adress Adress { get; set; }
}
}
OdeToFoodDB
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 { get; set; }
public DbSet<Reviewers> Reviewer { get; set; }
}
}
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() 函數中,添加以下的代碼
{
// Database.SetInitializer(new DropCreateDatabaseIfModelChanges<OdeToFoodDB>());
Database.SetInitializer( new OdeToFoodDBInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
你也可以寫一個類繼承DropCreateDatabaseIfModelChanges<OdeToFoodDB>, 如下代碼所示,你就可以不用注釋的哪一行代碼了
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();
}
}
重新運行運用程序,會給你一個意想不到的結果,你會驚呆的。
