ASP.NET Entity Framework(EF)中基本增删改查的各种写法和详细说明

前言

在以前学习和使用WinForm、ASP.NET WebForm、三层架构的时候,对于数据访问的实现,无论是什么逻辑,简单还是复杂,无论是执行SQL语句还是调用存储过程都要用到ADO.NET技术,通过封装好的SQLhelper类传入SQL语句和SqlParameter参数来操作数据库,使用起来还是有点麻烦呐~~~

随着.Net学习的不断深入,学习过ASP.NET MVC知识体系时才逐渐开始了解和使用微软ORM系列的Entity Framework框架,通过使用EF可以方便快捷的操作数据库。我一共学习和使用了三种模式的EF(DBFirst[数据库优先]ModelFirst[模型优先]CodeFirst[代码优先]),最初学习时从ADO.NET向EF的转变过程也不是很轻松,这里对EF的各种增删改查方法做一次系统的总结和巩固,方便自己以后温故知新,也可以帮助小白快速入门。

这里使用DBFirst EF 6.0对一张表进行描述(#^.^#)

       EF上下文对象:

      表中对应字段:(我用了一个十几年前的商品数据库,里面的字段名都是拼音缩写,不要效仿前辈们的陋习O(∩_∩)O哈哈~)

       

一、查询

EF中我们可以使用三种方式进行查询操作:Linq语句、Linq方法和SQL语句,这三种方法我会逐一进行说明。

①查询全表数据

          这里为了查看结果方便,都使用ToList()结束了延迟加载。

          1.方法一:Linq方法

var list = entities.T_Spb.Select(s=>s).ToList();
var list = entities.T_Spb.ToList();

   2.方法二:Linq语句

var list = (from item in entities.T_Spb
             select item).ToList();

  3.方法三:SQL语句

var list = entities.T_Spb.SqlQuery("select * from T_Spb").ToList();
var list = entities.Database.SqlQuery("select * from T_Spb").ToList();

        注:三者种方法结果相同,但是ToList()之前的返回值类型是不一样的。方法一、方法二(使用Linq)返回值类型为IQueryable<T>,方法三中DbSet.SqlQuery()返回值类型为DbSqlQuery<T>,database.SqlQuery()返回值类型为DbRawSqlQuery<T>。

②查询单个数据
         查询id为30的商品

          特殊:Find方法根据要查找的实体的主键值查对象。若通过主键查,用Find()比较方便。

var model = entities.T_Spb.Find(30);

          1.方法一:Linq方法

var model = entities.T_Spb.Where(s => s.SpID == 30).FirstOrDefault();
var model = entities.T_Spb.FirstOrDefault(s => s.SpID == 30);//上面的简写形式

         注:查询单个数据时,可以使用First()、FirstOrDefault()、Single()、SingleOrDefault()

           1. First 返回第一条数据 结果为空时出异常 FirstOrDefault 返回序列第一条数据 数据为空返回null
           2. Single  SingleOrDefault 返回序列第一条数据 多条结果时出异常

         2.方法二:Linq语句

var model = (from s in entities.T_Spb
                 where s.SpID == 30
                 select s).FirstOrDefault();

          3.方法三:SQL语句

var model = entities.T_Spb.SqlQuery("select * from T_Spb where spid=30").FirstOrDefault();
var model = entities.Database.SqlQuery<T_Spb>("select * from T_Spb where spid=30").FirstOrDefault();

     ③查询部分数据(带条件的查询)
         例:模糊查询 查询商品名称中含有 霸王 的商品

            1.方法一:Linq方法

var list = entities.T_Spb.Where(s => s.Spmc.Contains("霸王")).ToList();

            2.方法二:Linq语句

var list = (from s in entities.T_Spb
                 where s.Spmc.Contains("霸王")
                 select s).ToList();

            3.方法三:SQL语句

var list = entities.T_Spb.SqlQuery("select * from T_Spb where Spmc like '%霸王%'").ToList();
var list = entities.Database.SqlQuery<T_Spb>("select * from T_Spb where Spmc like '%霸王%'").ToList();

      ④查询部分字段

          1.方法一:Linq方法

var list = entities.T_Spb.Select(s => new { id = s.SpID, name = s.Spmc}).ToList();

         2.方法二:Linq语句

var list1 = (from s in entities.T_Spb
                        select new
                        {
                            id = s.SpID,
                            name = s.Spmc
                        }).ToList();

      因为查询部分字段要返回一个匿名类对象,调用SQL语句要指明类型,这里就不写调用SQL啦!

二、添加

      1.方法一:Add()

var model = new T_Spb() { Spmc = "防脱发神器", Spgg = "ml", Spdw = "瓶", Splb = 2, Sptxm = "0000000000", Spbz = "程序员必备" };
entities.T_Spb.Add(model);
entities.SaveChanges();

   2.方法二:修改State状态

   注:EF中的实体的状态值有Detached、Unchanged、Added、Deleted、Modified五种,可以通过修改上下文中实体的State值来实现      相应增删改操作。

var model= new T_Spb() { Spmc = "防脱发神器1", Spgg = "ml", Spdw = "瓶", Splb = 2, Sptxm = "0000000001", Spbz = "程序员必备" };
entities.Entry(model).State = System.Data.Entity.EntityState.Added;
entities.SaveChanges();

 3.方法三:执行SQL语句

entities.Database.ExecuteSqlCommand("sql");//返回受影响行数

三、删除

      删除主键为50的商品       

  1. 方法一:Remove()【先查找再删除,操作数据库两次】

var model = entities.T_Spb.Find(50);
entities.T_Spb.Remove(model);
entities.SaveChanges();

  2.方法二:修改State状态【直接删除操作数据库一次】

var model = new T_Spb() { SpID = 50 };
entities.Entry(model1).State = System.Data.Entity.EntityState.Deleted;
entities.SaveChanges();

     注意事项①:

     若直接实例化一个实体对象【不是查出来的】,直接使用Remove()方法,则会引发异常。

     解释:Remove()操作的对象必须在EF上下文中,直接new的实体对象是不在上下文中的。

   解决办法:通过Attach()方法 将实例化的model添加到EF上下文对象即可!

    注意事项②:

    若不指定主键值,直接修改State值去删除也会引发异常。

    解释:EF上下文中通过主键对实体对象进行跟踪,因此修改State值删除时要指明主键。

    解决办法:指定主键值

四、修改

1.方法一 修改部分字段 (先查再修改) 

var model = entities.T_Spb.FirstOrDefault(x=>x.SpID==30);
model.Sptxm = "10241024";
entities.SaveChanges();

2.方法二:修改全部字段【设置State状态跟删除一样,要指明主键

  注意:这种更新会将实例化的新对象中的值全部更新到数据库中,未赋值的字段为更新为null值

var model2 = new T_Spb { SpID = 42,Sptxm="10241024" };
entities.Entry(model2).State = System.Data.Entity.EntityState.Modified;//全部更新
entities.SaveChanges();

 若想采用方法二修改部分字段可以先将实例化model添加到上下文中,设定某一字段的IsModified属性来实现

var model2 = new T_Spb { SpID = 45,Sptxm="10241024" };
entities.T_Spb.Attach(model2);
entities.Entry(model2).Property("Sptxm").IsModified = true;
entities.SaveChanges()

结语

以上就是EntityFramework 中单表基本增删改查的各种方法在不同情况下的使用和详细说明,每种Linq语句对应的Linq方法也都写出,关键部分和使用时的注意事项都做了着重解释。对EF CRUD做了细致的总结,为了自己以后出问题时及时更新,也可以帮助大家对EF的增删改查有个系统性的了解,同时也可以帮助志同道合的同学快速入门!

以上概述都来自平时的学习和开发积累,都是个人的一些看法和心得,若有出入可以参照Microsoft官方文档进一步学习吖!

  • 17
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: ASP.NET MVC是一种基于ASP.NET的Web应用程序框架,它使用模型-视图-控制器(MVC)模式来构建Web应用程序。EFEntity Framework)是一种ORM(对象关系映射)框架,它可以将数据库的数据映射到.NET对象增删改查是指对数据库的数据进行增加、删除、修改和查询操作。在ASP.NET MVC,可以使用EF来进行数据库操作,实现增删改查功能。 ### 回答2: ASP.NET MVC 和 EF 是一对强力的开发工具,可以面向对象地开发 Web 应用程序。他们使用的是基于现代软件工程原则的模型-视图控制器模式,也就是MVC。这种模式不仅分离了应用程序的三个核心方面,即用户界面、数据业务逻辑和用户数据,而且还允许多个团队在不干涉彼此的情况下同时开发应用程序。 对于ASP.NET MVC来说,它是一种Web应用程序开发框架,适用于开发具有复杂功能和交互需要的动态Web应用程序。在ASP.NET MVC,模型-视图-控制器(MVC)模式被广泛使用,以将Web应用程序拆分为三个核心部分:控制器,模型和视图。控制器作为请求接收者,负责处理请求并将响应发送回客户端;视图则负责呈现应用程序的用户界面;而模型则负责管理和检索应用程序的状态和数据。 对于EF来说,它是一种ORM对象关系映射工具,可自动将.NET对象映射为关系数据库的表、视图和存储过程。使用EF,我们可以通过一个简单的API访问数据库,而不需要复杂的SQL语句。EF支持各种数据库,包括Microsoft SQL Server,Oracle,MySQLSQLite等。 对于ASP.NET MVC和EF增删改查,我们可以通过以下步骤来实现: 1. 建立数据库连接 在使用EF进行增删改查之前,我们需要建立数据库连接。在ASP.NET MVC,我们可以在Web.config文件配置连接字符串,指定数据库的位置和访问凭据。 2. 创建模型 我们需要创建一个类来定义模型。该类应该包含与数据库表的列对应的属性。这些属性名称和数据类型应该与数据库的列对应,以便我们可以将数据从一个位置传递到另一个位置。 3. 创建数据库上下文 我们需要创建一个EF数据库上下文,该上下文负责管理数据库连接和数据操作。我们可以在该上下文创建插入、更新、删除和查询方法。 4. 插入数据 我们可以通过在数据库上下文创建一个新对象并将其添加到数据库上下文来插入数据。保存更改后,这些更改将通过EF发送到数据库。 5. 更新数据 要更新数据,我们可以在数据库上下文查询现有对象,并更改其属性。一旦更改完成,我们可以保存更改并将更改提交到数据库。 6. 删除数据 要删除数据,我们可以在数据库上下文查询现有对象,并调用删除操作。一旦删除完成,我们可以保存更改并将更改提交到数据库。 7. 查询数据 要查询数据,我们可以使用数据库上下文来执行LINQ查询。LINQ查询可用于检索数据,并通过视图将数据呈现给用户。 综上所述,我们可以看出ASP.NET MVC和EF是一对非常强大的应用程序开发工具,可以帮助我们构建复杂的Web应用程序,并为我们提供了一种简单而直观的方法来管理数据库操作。在项目应用它们,可以极大地提高我们的开发效率,提高生产力。 ### 回答3: ASP.NET MVC是一种基于模型-视图-控制器(Model-View-Controller, MVC)架构设计的Web应用程序框架。该框架使用MVC设计模式,将应用程序分为几个不同的组件,这些组件分别处理不同方面的应用程序逻辑。 Entity FrameworkEF)是一种对象关系映射(Object-Relational Mapping, ORM)框架,用于将数据库的表格数据映射到.NET对象。它允许开发人员通过使用.NET语言(如C#和VB.NET)来编写应用程序,而不必直接处理SQL代码。 在ASP.NET MVC应用程序使用EF可以简化数据访问层的开发过程,并为应用程序提供数据持久化解决方案。下面将介绍如何在ASP.NET MVC完成增删改查方法: 增加数据: 应用程序需要将表格的数据添加到数据库,可以通过以下几个步骤来完成添加数据的方法: 1、在模型定义一个实体,该实体将表示您要添加到表的数据。 2、在控制器创建一个方法,该方法接受一个参数,该参数是从HTTP POST请求发送到服务器的实体。 3、在方法创建一个新的实体,将数据从请求参数分配给该实体的属性。 4、将新实体添加到EF上下文并保存更改。 删除数据: 应用程序需要从一个删除数据,可以通过以下几个步骤来完成删除数据的方法: 1、在控制器创建一个方法,该方法接受一个参数,该参数是表格的数据的唯一标识符。 2、在方法使用EF查找需要删除的实体,并从 EF上下文删除实体。 3、将更改保存到数据库。 更新数据: 应用程序需要更新表格的数据,可以通过以下几个步骤来完成更新数据的方法: 1、在模型定义一个实体,该实体将表示您要更新表格的数据。 2、在控制器创建一个方法,该方法接受一个参数,该参数是从HTTP POST请求发送到服务器的实体。 3、在方法使用EF查找需要更新的实体。 4、将传入的实体的属性复制到EF查找到的实体。 5、将更改保存到数据库。 查询数据: 应用程序需要从一个检索数据,可以通过以下几个步骤来完成查询数据的方法: 1、在控制器创建一个方法,该方法将返回从数据库检索到的实体。 2、在方法使用EF执行一个查询,以从表检索数据。 3、返回从DB检索到的实体。 综上所述,使用ASP.NET MVC和EF可以轻松地完成最常用的数据库操作,增加、删除、修改和查询数据。此外,这些操作的执行效率也很高,可以为开发者节省大量的时间和精力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值