首先介紹一下ModelFirst開發方式,什麼時候才用呢!在沒有資料庫時,可以藉助EF設計模型,然後根據模型同步完成資料庫中表的建立,這就是Model First開發方式,簡而言之就是先有模型再有表。
首先是新增ADO.NET 實體模型,然後選擇空模型,再然後建立實體,新增欄位,切記一定要新增主鍵,主鍵既可以是自增長的數字型別,也可以是Guid型別
然後就是新增欄位,除主鍵外的欄位叫新增標量屬性,在設計標量欄位時一定要記得設計其最大範圍,不然會嚴重影響效能
新增實體,也就是表的關係,步驟是單擊工作皮膚空白處新增——>關聯,在新增關聯對話方塊中進行設定,其中值得注意的是導航屬性不要去掉,因為後面用他來查詢將會變得非常方便
導航屬性,顧名思義就是根據這個屬性可以找到一個和他關聯的物件實體。
這些以上步驟完成,按Ctrl+s組合鍵儲存,vs會自動生成三個類
然後右擊工作空白區,根據模型生成資料庫,並執行SQL指令碼建立資料庫
然後我們進行程式碼測試:
1 #region 增加方法 2 3 4 static void AddTestData() 5 { 6 using (ModelFirstModelContainer db = new ModelFirstModelContainer()) 7 { 8 Customer _Customer = new Customer { Name = "楚留香", Age = 25, CompanyName = "大旗門", Telphone = "18720671285" }; 9 Order _Order = new Order { Amount = 15, CreateTime = DateTime.Now, OrderNo = "20170624", CustomerID = _Customer.ID }; 10 Order _Order2 = new Order { Amount = 16, CreateTime = DateTime.Now, OrderNo = "20170625", Customer = _Customer }; 11 Product _Product = new Product { ID = Guid.NewGuid(), Name = "牛欄1段", Price = 14, Weight = 22, Customer = new List<Customer>() { _Customer } }; 12 13 db.Customer.Add(_Customer); 14 db.Order.Add(_Order); 15 db.Order.Add(_Order2); 16 db.Product.Add(_Product); 17 18 if (db.SaveChanges() > 0) 19 { 20 Console.WriteLine("新增成功!"); 21 } 22 else 23 { 24 Console.WriteLine("新增失敗!"); 25 } 26 } 27 } 28 #endregion
1 #region 查詢方法 2 static void SearchCusOrder() 3 { 4 using (ModelFirstModelContainer db=new ModelFirstModelContainer()) 5 { 6 //var _OrderList = from o in db.Order 7 // where o.Customer.Name == "楚留香" 8 // select o;//先查Order表資訊,然後直接通過導航屬性customer來過濾 導航屬性查詢 9 var _OrderList1 = from c in db.Customer join o in db.Order on c.ID equals o.CustomerID where c.Name == "楚留香" select o;//通過Join查詢 10 11 Console.WriteLine("客戶楚留香的所有訂單如下:"); 12 _OrderList1.ToList().ForEach(o=>Console.WriteLine(string.Format("訂單號:{0},訂單金額:{1},訂單建立時間:{2}",o.OrderNo,o.Amount,o.CreateTime))); 13 Console.ReadKey(); 14 } 15 } 16 #endregion
其中新增方法中db.SaveChanges()預設是已經開啟了事務的,而且在這之前都只進行了一次資料庫的連線,這種類似批處理的操作大大地提升了效能
查詢方法中用了兩種查詢方法。一種是導航屬性查詢,另一種就是join查詢
其中導航屬性查詢相當於SQL中的子查詢,join查詢就相當於SQL中的Inner join查詢一樣,在資料量大的情況下使用導航屬性查詢,在資料量不大的情況下就使用join查詢
以上的開發環境是vs2012+SQL2012