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

时间: 2024-11-03 16:01:51

EF的CRUD的相关文章

EF入门-CRUD操作

一.EF数据查询假设我们已经定义好了context:private AccountContext db = new AccountContext(); 1.[基本查询] 查询所有var users = from u in db.SysUsers select u; users = db.SysUsers; 2.[条件查询] 加入查询条件users = from u in db.SysUserswhere u.UserName == "Tom"select u; users = db.S

EF CodeFirst增删改查之‘CRUD’

最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    本篇旨在学习EF增删改查四大操作 上一节讲述了EF CodeFirst 创建数据库,本节继续引用上一节的相关类学习EF的CRUD操作 废话少说,直接上要点,上一节中的模型类我作了如下修改: using System; using System.Collections.Generic; using System.ComponentModel.Data

[转]EntityFramework走马观花之CRUD(下)

学习Entity Framework技术期间查阅的优秀文章,出于以后方便查阅的缘故,转载至Blog,可查阅原文:http://blog.csdn.net/bitfan/article/details/14231561 我在Entity Framework系列文章的CRUD上篇中介绍了EF的数据查询,中篇谈到了EF的数据更新,下篇则聊聊EF实现CRUD的内部原理. 跟踪实体对象状态 在CRUD上篇和中篇谈到,为了实现提取和更新数据的功能,EF必须使用某种机制来跟踪实体对象,以便依据对象当前状态生成

利用EF和C#泛型实现通用分页查询

利用EF和C#泛型实现通用分页查询 Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (ORM) 解决方案,是微软的ORM框架.此框架将数据库中的表信息通过xml与实体类对象相关联,使得开发人员只需要关心实体对象,而不需要手动操作数据库,对实体对象的修改会映射到数据库中,这样大大提高了开发效率.以下代码使用了EF.泛型.泛型委托.lambda.匿名类.dynamic动态类型等知识完成了EF的crud,并且提供了一个高效的通用分页查询方法,采用了延时加载,

ASP.NET MVC5.0+Entity Framework(EF)6.1系列教程

ASP.NET MVC5.0+Entity Framework(EF)6.1系列教程 从webform+ado.net开发模式转换到asp.net mvc+ef开发模式已经有一年多时间了.一直希望能够将自己开发中的一点微薄经验写下啦,现在列个目录,鼓励自己写下去. 1.1 Entity Framework(EF) ASP.NET MVC+Entity Framework(EF)技术介绍 ASP.NET MVC+Entity Framework(EF)项目搭建 3种Entity Framework

EntityFramework走马观花之CRUD(下)

我在Entity Framework系列文章的CRUD上篇中介绍了EF的数据查询,中篇谈到了EF的数据更新,下篇则聊聊EF实现CRUD的内部原理. 跟踪实体对象状态 在CRUD上篇和中篇谈到,为了实现提取和更新数据的功能,EF必须使用某种机制来跟踪实体对象,以便依据对象当前状态生成相应的SQL命令. 这里的关键是区分清楚内存中的数据实体对象和数据库中的记录. 当程序运行时,位于内存中的EF数据实体可以处于以下五种状态之一: 1.        Added: 实体对象是新创建的,数据库中没有相应的

DDD领域驱动设计仓储Repository

DDD领域驱动设计初探(二):仓储Repository(上) 前言:上篇介绍了DDD设计Demo里面的聚合划分以及实体和聚合根的设计,这章继续来说说DDD里面最具争议的话题之一的仓储Repository,为什么Repository会有这么大的争议,博主认为主要原因无非以下两点:一是Repository的真实意图没有理解清楚,导致设计的紊乱,随着项目的横向和纵向扩展,到最后越来越难维护:二是赶时髦的为了“模式”而“模式”,仓储并非适用于所有项目,这就像没有任何一种架构能解决所有的设计难题一样.本篇

第06章 ASP.NET 5:EntityFramework7

1.前言 上一篇文中扯的是EF6下的实体关系设计及迁移,预留的问题也不再补充了.原因写此系列文章,其初衷是针对ASP.NET 5介绍的,EF6又不支持它的,略过也罢. EF的性能是永远抛不开的话题,园子里的师傅们也一直争论不休.(每次看到此类帖,点击量老高了) 不知道大家是否明白:什么是平台?什么是框架?什么是类库?我在此也可能说的不对,也望你纠正. EF显然不是什么平台,因为不能只依赖它来开发或运行一个什么应用. 哪它是框架吗?说到这,还是得解释一下何谓框架?简单地说它规定或规则好一些架子,你

ASP.NET MVC笔记誊录

非托管代码:像由c++写的程序直接把二进制代码交给操作系统的内核来处理,叫做非托管代码 托管代码:运行在CLR下面的代码叫托管代码,由CLR来对代码进行异常等处理,编译成平台代码 匿名函数: public delegate int AddDel(int a,int b); 简单委托: AddDel delDemo=new AddDel(AddInt) public int AddInt(int a,int b) { return a+b; } 泛型委托,一般用于约束返回值和传入的参数 publi