本節導航
1、在MSSQL2008R2中創建Movie數據庫
2、添加ADO.NET實體數據模型
3、修改數據上下文
4、運行效果
一、在MSSQL2008R2中創建數據庫
首先,我們需要在MSSQL2008R2中創建一個名為Movie的數據庫,具體的參數這里不講,默認即可。然后【新建查詢】。
因為在我們之前的代碼中,我們已經通過code first創建好了我們需要使用的數據庫和表,所以我們只需要將這些表結構倒出來然后放到剛剛的新建查詢里去執行就可以了。由於先前的庫在localdb中,所以,我們需要在vs中打開localdb的連接。
然后在表名上右鍵選擇【打開表定義】,獲得創建表的T-SQL語句。然后拷貝T-SQL語句到新建查詢窗口。以此類推,將三個表的創建語句都拷貝到MSSQL2008R2中,在新建查詢里,看起來應該是這樣的:
在這里面,大家會發現,我優化了數據類型的長度,在code first中,字符串類型的長度都是MAX,我在這里依據實際情況稍加了修改。
然后點擊【執行】創建數據庫表。創建完成之后,我們做后續的工作。
二、添加ADO.NET實體數據模型
我們在【Models】文件夾上右鍵選擇【添加】--【新建項】,打開如圖所示窗口
點擊左側導航中的【數據】,然后選擇右側的【ADO.NET Entity Data Model】,(我這里是英文版的),名稱叫做Movie.edmx。接下來出現如下對話框
選擇從數據庫更新
創建一個新的連接到我們MSSQL2008R2中的Movie庫。
創建一個新的連接到我們MSSQL2008R2中的Movie庫。
添加我們需要導入到實體模型中的表、視圖和存儲過程等。
點擊完成之后,可能會出現“代碼會威脅電腦安全”之類的警告,這里選擇依然保存就可以了。然后我們的【Models】文件夾就變成了這個樣子:
生成項目,如果沒有錯誤,繼續下面的操作。
三、修改數據上下文
需要注意的是,我們在前幾節當中做的都是code first,所以有些代碼在數據庫優先下沒有必要存在,這里我們需要做一下修改。首先是數據上下文文件MovieContext。我們注釋掉OnModelCreating()方法。
//protected override void OnModelCreating(DbModelBuilder modelBuilder) //{ // //base.OnModelCreating(modelBuilder); // modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //}
因為這里我們換了數據庫,那么數據庫連接字符串也要有相應的改變。我們可以到web.config當中看一眼,是不是多了一個連接,而這個連接正是我們創建實體模型是使用到的。既然已經有了連接串,我們需要做的工作是告訴DbContext我們要使用哪個連接串,這個在前面的章節中已經講到過,直接看代碼
private const string CONNECTION_STRING = "name=movieEntities"; public MovieContext() : base(CONNECTION_STRING) { }
做完這些之后,我們的MovieContext看起來就成了這個樣子:
public class MovieContext:DbContext { private const string CONNECTION_STRING = "name=movieEntities"; public MovieContext() : base(CONNECTION_STRING) { } public DbSet<Movie> Movie { get; set; } public DbSet<Author> Authors { get; set; } public DbSet<OperLog> OperLog { get; set; } //protected override void OnModelCreating(DbModelBuilder modelBuilder) //{ // //base.OnModelCreating(modelBuilder); // modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //} }
接下來,還有一次要進行修改,那就是Global.asax,因為在這里面我們注冊了一個數據庫初始化的操作 ,我們需要將這行代碼注釋掉或者刪掉。
//Database.SetInitializer<MovieContext>(new Initializer());
做完這些之后,生成,沒有錯誤之后就可以按F5看一下運行效果了。當然因為我們換了新庫,數據是沒有了的,需要我們再添加一些數據進去。
四、運行效果
數據庫里
需要注意:在EF4.1中,創建實體模型時,不會自動創建代碼生成項,需要我們在模型界面上右鍵,選擇【添加代碼生成項】,這樣就不會報“the type '' was not mapped”錯誤了。