ModelFirst開發

守望陽光01發表於2017-06-24

首先介紹一下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
View Code
 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
View Code

其中新增方法中db.SaveChanges()預設是已經開啟了事務的,而且在這之前都只進行了一次資料庫的連線,這種類似批處理的操作大大地提升了效能

 

查詢方法中用了兩種查詢方法。一種是導航屬性查詢,另一種就是join查詢

其中導航屬性查詢相當於SQL中的子查詢,join查詢就相當於SQL中的Inner join查詢一樣,在資料量大的情況下使用導航屬性查詢,在資料量不大的情況下就使用join查詢

 

以上的開發環境是vs2012+SQL2012

 

相關文章