已经知道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的编码确实简单了非常多。