EF的CRUD
已經知道EF就是一個能夠使得編程人員用面向對象的思想操作數據庫的框架,那麽在最初學習SQL的時候我們就知道對數據庫的操作就是增刪改查。萬變不離其宗。
EF也是操作數據庫的當然也就是要對數據庫實現增刪改查(稱為CRUD)而ADO.net、EF都是一種方式,還有就是Linq也能夠不適用SQL語句就實現對數據庫的CRUD。如今我們主要學習的就是EntityFrameWork究竟是怎麽進行的。
在VS中使用“ADO.net數據實體模型”後生成的.edmx文件下會有一個後綴為.Context.tt的文件。其下的.Context.cs裏類包括了在操作數據庫時的類,例如以下的這段代碼是就是它的代碼
詳細在使用時
如上就是實現簡單的增刪改查,那麽詳細的代碼有是怎麽樣的
<span style="font-size:18px;">#region 新增 add() /// <summary> /// 1.0新增 /// </summary> public void add() { //1.1首先要創建添加到數據庫實體對象 T_Book book = new T_Book(){ bookID="10",bookName="yxf",caID="1",IsBorrowed=false, publishCompany="yxf",status=true,writer="yxf",ISBN="789" }; //1.2通過EF中的Add()方法將對象新增到數據庫 db.T_Book.Add(book);//T_Book 是DbSet類型的。當中包括了Add、attach、where等方法 db.SaveChanges();//保存改動 Console.Write("保存成功"); } #endregion</span>
<span style="font-size:18px;">#region 刪除 Delete() //2.0刪除 public void Delete() { //2.1查找要刪除的對象 T_Book Dbook = new T_Book() { bookName="yxf"}; //2.2將要刪除的對象附加到EF中 db.T_Book.Attach(Dbook); //2.3標記為刪除 db.T_Book.Remove(Dbook); //2.4保存 db.SaveChanges(); } #endregion</span>
<span style="font-size:18px;">#region 改動 Edit() ///<summary> ///3改動 /// </summary> public void Edit() { //3.1、查出要改動的對象。表示bookID為1的書 T_Book NBook = db.T_Book.Where(book =>book.bookID=="1").FirstOrDefault(); //3.2、改動內容,直接的改動查出的對象的屬性就可以 NBook.bookName = "楊曉菲"; //3.3、保存 db.SaveChanges(); } #endregion</span>
最後就是查詢。由於EF最後還是要通過ADO.net生成SQL語句才幹操作數據庫,查詢就須要確定條件。所以講查詢分為及時查詢和延遲的(也稱延遲載入)。
延遲載入:
1、主要是為了確定查詢的條件,在生成SQL語句的時候要確定查詢的條件。所以延遲載入僅僅有在真正的查詢的時候才生成SQL語句,例如以下列
<span style="font-size:18px;">System.Data.Entity.Infrastructure.DbQuery<T_Book>dbquery = db.T_Book.Where(book =>book.bookName=="yxf").OrderBy(book=>book.bookID)as System.Data.Entity.Infrastructure.DbQuery<T_Book>;//這裏的where和OrderBy都是查詢的條件,在這裏都僅僅是在拼接條件</span>
T_Book book1 = dbquery.FirstOrDefault();//在用這個對象的時候才生成SQL語句
2、針對外鍵的延遲載入,有外鍵的表在使用時。那個外鍵所相應的表相當於是當前表的一個屬性,在進行查詢時假設僅僅是用到當前表中的內容就僅僅查當前表僅僅實用到外鍵所在表的屬性時才查還有一張表。
有時須要同一時候的查兩張表,在使用SQL時須要使用Inner Join,在EF中直接使用Include方法就可以。
小結:
EF中增刪改查的實現都是使用的方法,而當中查詢的語句又有點類似SQL語句。查詢須要條件。為了可以生成出正確的SQL語句又有了延遲載入。而表的連接查詢用法Include就行了,相比起使用SQL語句EF的編碼確實簡單了非常多。
EF的CRUD