標籤:
-----------------------------------------------------目錄-----------------------------------------------------
EntityFramework 5.0 CodeFirst 教程01-搭建環境和快速上手 (2015-07-13 10:48)
EntityFramework 5.0 CodeFirst 教程02-刪除和修改/架構改變異常的處理 (2015-07-14 17:50)
-----------------------------------------------------目錄-----------------------------------------------------
上節,我們搭建了一個簡單的環境,並且通過代碼First的方式,產生資料庫,建立資料表,同時往資料表中添加記錄,尋找資料表中的資料,這集我們先來學習擷取其中的一條記錄,對該記錄進行修改,然後刪除某一條記錄。
首先是擷取一條記錄,比如擷取第一條記錄
//擷取一條資料using (var context = new Context()){ var savedPeople = context.People; if (savedPeople.Any())//如果源序列包含任何元素,則為 true;否則為 false 也就是如果表中有一條記錄 { var person = savedPeople.First();//取得第一條 string name = person.FirstName;//取得資料 }}
如果要擷取某一條
var personId = 1; var p2 = context.People.Find(personId);//擷取要刪除的記錄 通過主鍵ID
上面我們既然可以拿到一條資料,那麼下面我們就可以修改這條資料了,比如我們要將firstName修改
//修改一條記錄 using (var context = new Context()) { var savedPeople = context.People; if (savedPeople.Any())//如果源序列包含任何元素,則為 true;否則為 false 也就是如果表中有一條記錄 { var person = savedPeople.First();//取得第一條 person.FirstName = "www.bamn.cn";//修改名字 person.LastName = "Benson"; context.SaveChanges(); } }
然後就是刪除一條記錄了 刪除一條記錄,其實非常簡單的,上面我們已經可以根據ID擷取一條記錄了,那麼要刪除這條記錄,只需要擷取這條交流 然後調用上下文context中的Remove方法就可以刪除這條記錄了,但是有一條要注意,就是刪除了要記得SaveChanges喔。。
//刪除一條記錄using (var context = new Context()){ var personId = 2; var person = context.People.Find(personId);//擷取要刪除的記錄 通過主鍵ID if (person != null) { context.People.Remove(person); context.SaveChanges(); }}
------------------------------------------------------------------------------好了,上一拍裡面我們基本實現了對資料庫的建立 新增 查詢 修改 刪除,但是我們一直都是只對一張表進行操作,那就是person表,我們的資料結構一直都沒有變化,但是這個肯定是不合邏輯的,我們肯定需要其他的表,或者要修改已經有的表,這個時候我們操作發現會報錯,首先我們添加一個公司的類
public class Company { public int CompanyId { get; set; } public string Name { get; set; } }
很簡單,只有一個主鍵 和一個名稱 然後在上下文context裡面添加一個dataset public DbSet<Company> Companies { get; set; } 這樣修改後,當我們運行我們的程式的時候,會報下面的錯誤 “System.InvalidOperationException”類型的未處理的例外狀況在 EntityFramework.dll 中發生 其他資訊: The model backing the ‘Context‘ context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269). 這個時候,我們需要使用另外的一種方法來重新構建我們的資料結構定義一個Initializer類DropCreateDatabaseIfModelChanges<Context>這是一個泛型類然後重寫seed因子方法
protected override void Seed(Context context) { context.Companies.Add(new Company { Name = "My company" }); }
在這個方法裡面,我們添加一條記錄到表了,這個seed方發揮在執行完本來的操作後才會觸發的當然我們會有更好的方法來處理這個結構改變的問題,我們以後的課程會學習這個問題的...執行完後,代碼不會報異常了,而且也添加了一個新表companies 本集全部代碼#region 第二節課
//擷取一條資料 //using (var context = new Context()) //{ // var savedPeople = context.People; // if (savedPeople.Any())//如果源序列包含任何元素,則為 true;否則為 false 也就是如果表中有一條記錄 // { // var person = savedPeople.First();//取得第一條 // string name = person.FirstName;//取得資料 // var personId = 1; // var p2 = context.People.Find(personId);//擷取要刪除的記錄 通過主鍵ID // } //} //修改一條記錄 //using (var context = new Context()) //{ // var savedPeople = context.People; // if (savedPeople.Any())//如果源序列包含任何元素,則為 true;否則為 false 也就是如果表中有一條記錄 // { // var person = savedPeople.First();//取得第一條 // person.FirstName = "www.bamn.cn";//修改名字 // person.LastName = "Benson"; // context.SaveChanges(); // } //} //刪除一條記錄 //using (var context = new Context()) //{ // var personId = 2; // var person = context.People.Find(personId);//擷取要刪除的記錄 通過主鍵ID // if (person != null) // { // context.People.Remove(person); // context.SaveChanges(); // } //} #endregion Database.SetInitializer(new Initializer());//取消資料庫結構描述修改後 using (var context = new Context()) { bool res = context.Database.CreateIfNotExists(); //往資料庫中添加資料 var person = new Person { FirstName = "John", LastName = "Doe" }; context.People.Add(person); context.SaveChanges(); //擷取資料 var savedPeople = context.People; foreach (var p in savedPeople) { Console.WriteLine("Last name:{0},first name:{1},id {2}", p.LastName, p.FirstName, p.PersonId); } } Console.ReadKey();------------------------------------------------- 好了這集就先說的這裡,我們下一集來學習複雜一點的資料結構....本集代碼:http://pan.baidu.com/s/1gd0FxsR更多EF資料,可以登入本人的首頁。。。感謝大家的閱讀....
EntityFramework 5.0 CodeFirst 教程02-刪除和修改/架構改變異常的處理