已经知道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的编码确实简单了很多。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/yxflovegs2012/article/details/46968737