Model First
Model First我們稱之為“模型優先”,這里的模型指的是“ADO.NET Entity Framework Data Model”,此時你的應用並沒有設計相關數據庫,在Visual Studio中我們通過設計對於的數據模型來生成數據庫和數據類。
首先創建一個控制台應用程序,右鍵添加新建項,選擇“ADO.NET Entity Data Model”,名稱輸入EFDemoDB(此名稱跟上一個沒有任何聯系,只是重名而已):
在模型設計視圖中,添加新實體:(空白處右鍵)
添加,兩個Scalar屬性:“Customer”和“OrderDate(為datetime類型,可選中它在屬性中修改)”;同樣的方式添加第二個實體“OrderDetail”,並添加“Product”和“UnitPrice”屬性:
接下來我們添加二者之間的關系,“Order”和“OrderDetail”是一對多的關系,“Order”可以通過“OrderDetails”屬性訪問“OrderDetail”實體,“OrderDetail”可以通過“Order”屬性訪問“Order”實體,並且添加了一個外鍵約束到“OrderDetail”中:
添加過關系后:
到目前為止Model First中的Model已經創建結束,下面就需要生成到數據庫了,在模型設計視圖空白處選擇“從模型生成到數據庫…”:(這里還是用的上面那個EFDemo數據庫,可根據自己需求更改,新建連接更換數據庫)
選擇數據庫連接,點擊下一步,你將會看到生成的sql語句:
點擊完成,不出意外的話將打開生成的腳本,當然你也可能會出現如下錯誤,請下載最新的SQL Server Data Tool(本地VS2012,數據庫SQLServer2008R2出現了下面的提示,下載更新即可,建議直接下載鏡像文件):
在模型保存后,生成了數據庫上下文和實體類,並且打開了建表的腳本:
說明:如果沒有,看看模型是否保存了(如下圖)
打開的數據庫腳本:
然后右鍵選擇執行即可。
然后編碼查詢一下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.ComponentModel; 5 using System.Data; 6 using System.Text; 7 using System.Threading.Tasks; 8 9 namespace EFDemo 10 { 11 class Program 12 { 13 static void Main(string[] args) 14 { 15 Order o = new Order() { Customer = "", OrderDate = DateTime.Now }; EFDemoDBContainer db = new EFDemoDBContainer(); 16 db.Orders.Add(o); 17 int result = db.SaveChanges(); 18 19 var orders = from od in db.Orders select od; 20 21 foreach (Order order2 in orders) 22 { 23 Console.WriteLine("OrderID:{0},OrderDate:{1}", order2.Id, order2.OrderDate); 24 } 25 26 Console.Read(); 27 } 28 } 29 }
運行結果(正常情況下應該只有一行,這是我多次運行后的結果):
注意:如果我們的模型發生改變,只需要在模型設計視圖修改模型,讓后保存此時實體類就會相應改變,然后選擇“從模型生成到數據庫”重新執行生成的腳本即可。