广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >Entity Framework根据实体的EntityState状态实现增删改查
  • 695
分享到

Entity Framework根据实体的EntityState状态实现增删改查

2024-04-02 19:04:59 695人浏览 安东尼
摘要

在上一篇文章中,我们讲解了使用EF实现简单的增删改查,在这篇文章中我们使用实体的EntityState状态来优化数据的增删改查。 一、修改数据 上篇文章中的修改数据的方法是EF官方推

在上一篇文章中,我们讲解了使用EF实现简单的增删改查,在这篇文章中我们使用实体的EntityState状态来优化数据的增删改查。

一、修改数据

上篇文章中的修改数据的方法是EF官方推荐的方式,即先查询出来要修改的数据,然后在修改。但是这种操作会导致多次操作数据库

从上面的截图中可以看出,查询数据的时候会执行一次事物,修改的时候又执行了一次事物,即修改数据会操作两次数据库。那么有没有什么方法可以只操作一次数据库呢?那就是下面要讲解的EntityState。

使用EntityState优化上面的修改方法:

static void EditAdvance()
{
     using (StudentSystemEntities dbContext = new StudentSystemEntities())
      {
           // 将EF执行的sql语句输出到控制台
           dbContext.Database.Log += p => Console.WriteLine(p);
           // 创建要修改的对象
           Student stu = new Student()
           {
                 StudentID = 14,
                 Age = 690
            };
            // 通过上下文获取对象相关信息
            DbEntityEntry<Student> entry = dbContext.Entry<Student>(stu);
            // 对象的状态是没有修改
            entry.State = System.Data.Entity.EntityState.Unchanged;
            // 对象的属性值Age修改了
            entry.Property("Age").IsModified = true;
            // 保存修改 会智能判断哪个对象的哪个属性值修改了
            dbContext.SaveChanges();
            Console.WriteLine("修改成功");
     }
}

结果:

从上面的截图中不难看出,这次只操作了一次数据库。

好处:只执行一次数据库操作,不需要查询了,体现了EF修改的本质(通过实体对象的状态进行修改)。

二、删除

static void DeleteAdvance()
{
     using (StudentSystemEntities dbContext = new StudentSystemEntities())
     {
         // 将EF执行的SQL语句输出到控制台
         dbContext.Database.Log += p => Console.WriteLine(p);
         // 先查询然后在删除
         Student stu = new Student()
         {
               StudentID = 14
          };
          DbEntityEntry<Student> entry = dbContext.Entry<Student>(stu);
          entry.State = System.Data.Entity.EntityState.Deleted;
          // 保存,智能判断对象的状态
          dbContext.SaveChanges();
          Console.WriteLine("删除成功");
      }
}

结果:

三、新增数据

static void AddAdvance()
{
     using (StudentSystemEntities dbContext = new StudentSystemEntities())
      {
          // 定义Student对象
          Student stu = new Student()
          {
               StudentName = "花千骨",
               Sex = "女",
               Age = 3422,
               Major = "舞蹈专业",
               Email = "2345678911@qq.com"
           };
           // 将EF执行的SQL语句输出到控制台
           dbContext.Database.Log += p => Console.WriteLine(p);
           DbEntityEntry<Student> entry = dbContext.Entry<Student>(stu);
           entry.State = System.Data.Entity.EntityState.Added;
            // 保存的数据库
            dbContext.SaveChanges();
            Console.WriteLine("保存成功");
      }
}

四、批处理

利用EntityState可以很好的实现批处理功能,例如下面的例子:增加两条数据,修改一条数据,删除一条数据

static void Save()
{
      using (StudentSystemEntities dbContext = new StudentSystemEntities())
      {
           // 将EF执行的SQL语句输出到控制台
           dbContext.Database.Log += p => Console.WriteLine(p);
           // 新增数据1
           Student stu1 = new Student()
           {
               StudentName = "红孩儿",
               Age = 456,
               Major = "冶金专业"
            };
            dbContext.Students.Add(stu1);

            // 新增数据2
            Student stu2 = new Student()
            {
                StudentName = "青牛精",
                Age = 345,
                Major = "炼丹"
             };
             // 使用状态
             DbEntityEntry<Student> entry = dbContext.Entry<Student>(stu2);
              entry.State = System.Data.Entity.EntityState.Added;

              // 修改数据
              Student stuEdit = new Student()
              {
                    StudentID=5,
                    Age=678
              };
              //状态
              DbEntityEntry<Student> entryEdit = dbContext.Entry<Student>(stuEdit);
              entryEdit.State = System.Data.Entity.EntityState.Unchanged;
              entryEdit.Property("Age").IsModified = true;

              // 删除数据
              Student stuDel = new Student()
              {
                   StudentID=22
              };
              DbEntityEntry<Student> entryDel = dbContext.Entry<Student>(stuDel);
              entryDel.State = System.Data.Entity.EntityState.Deleted;

              // 保存
              dbContext.SaveChanges();
              Console.WriteLine("保存成功");
      }
}

使用EntityState实现批处理功能,只需要执行一次SaveChange()就可以了,如果是使用原来的方式就需要多次执行SaveChange(),这样可以减少数据库的操作。

总结:无论是add、remove、savechanges都是根据EF包装实体的State进行相应的增删改操作。

以上所述是小编给大家介绍的Entity Framework根据实体的EntityState状态实现增删改查,希望对大家有所帮助。在此也非常感谢大家对编程网网站的支持!

--结束END--

本文标题: Entity Framework根据实体的EntityState状态实现增删改查

本文链接: https://www.lsjlt.com/news/141793.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Entity Framework根据实体的EntityState状态实现增删改查
    在上一篇文章中,我们讲解了使用EF实现简单的增删改查,在这篇文章中我们使用实体的EntityState状态来优化数据的增删改查。 一、修改数据 上篇文章中的修改数据的方法是EF官方推...
    99+
    2022-11-13
  • Entity Framework使用DBContext实现增删改查
    有一段时间没有更新博客了,赶上今天外面下雨,而且没人约球,打算把最近对Entity Framework DBContext使用的心得梳理一下,早些时候在网上简单查过,对于最新版本的E...
    99+
    2022-11-13
    Entity Framework DBContext 增删改查
  • Entity Framework使用DataBase First模式实现数据库的增删改查
    在上一篇文章中讲解了如何生成EF的DBFirst模式,接下来讲解如何使用DBFirst模式实现数据库数据的增删改查 一、新增数据 新增一个Student,代码如下: static v...
    99+
    2022-11-13
  • Entity Framework主从表的增删改怎么实现
    本篇内容介绍了“Entity Framework主从表的增删改怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、添加数据1...
    99+
    2023-07-02
  • Entity Framework中如何使用DataBase First模式实现增删改查
    本篇内容主要讲解“Entity Framework中如何使用DataBase First模式实现增删改查”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Entity ...
    99+
    2023-06-29
  • php如何实现数据的增删改查
    PHP可以通过以下方式实现数据的增删改查:1. 数据的增加(Create):- 使用SQL语句插入数据:可以使用`INSERT IN...
    99+
    2023-08-23
    php
  • 数据库的增删改查如何实现
    数据库的增删改查操作可以通过SQL语句来实现。下面以MySQL数据库为例,介绍增删改查的常见操作:1. 增加(Insert):使用I...
    99+
    2023-08-31
    数据库
  • Java中怎么实现动态的增删改查属性
    这篇文章将为大家详细讲解有关Java中怎么实现动态的增删改查属性,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 JSON 字符串增加额外字段假如我们有这样结构的 JSON:{&nb...
    99+
    2023-06-16
  • C#操作SQLite实现数据的增删改查
    目录简介主要代码SQLiteHelper.csUsingLock.csForm1.cs简介 SQLite是一个轻量级、跨平台的关系型数据库,在小型项目中,方便,易用,同时支持多种开发...
    99+
    2022-11-13
  • Mybatis实现动态增删改查功能的示例代码
    目录一、Mybatis流程简介二、手写简化版Mybatis设计思路2.1简化后的思路2.2读取XML文件,建立连接2.3创建SqlSession,搭建Configuration和Ex...
    99+
    2022-11-12
  • PyQt5如何实现数据的增删改查功能
    这篇文章主要介绍“PyQt5如何实现数据的增删改查功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PyQt5如何实现数据的增删改查功能”文章能帮助大家解决问题。话不多说,还是先来梳理一下需要的第三...
    99+
    2023-06-29
  • PyQt5实现数据的增删改查功能详解
    通过这个布局思路来做一个简单的后台管理系统也是OK的,大家可以参考一下啦! 话不多说,还是先来梳理一下需要的第三方模块。 PyQ5 的UI界面布局部分,同样是还是使用这三个模块就够...
    99+
    2022-11-13
  • AJAX如何实现数据的增删改查操作
    这篇文章主要介绍了AJAX如何实现数据的增删改查操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。主页:index.html<!DOCTYPE html>...
    99+
    2023-06-08
  • PHP怎么实现数据库的增删改查操作
    数据库的增删改查是Web开发的基本操作之一,PHP作为一种强大的Web后端开发语言,也有非常便捷的操作数据库的方式。在这篇文章中,我们将介绍如何使用PHP来实现数据库的增删改查操作。一、连接数据库在PHP中,连接数据库是必不可少的一步。我们...
    99+
    2023-05-14
  • 3.Python-用Python实现MySQL数据库的增删改查
    题记         用python实现mysql数据库的增删改查,以下是具体的代码和操作步骤 安装flask模块         pip install flask 安装mysql.connector模块         pip...
    99+
    2023-10-18
    mysql 数据库 python flask javascript 开发语言 青少年编程
  • C#如何操作SQLite实现数据的增删改查
    这篇文章主要介绍了C#如何操作SQLite实现数据的增删改查,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简介SQLite是一个轻量级、跨平台的关系型数据库,在小型项目中,方...
    99+
    2023-06-28
  • PHP数据库函数实现数据的增删改查功能
    PHP数据库函数实现数据的增删改查功能摘要:数据库是存储和管理数据的重要组成部分。在开发Web应用程序时,经常需要对数据库进行增删改查的操作。PHP作为一种流行的服务器端编程语言,提供了丰富的数据库函数,用于实现数据的增删改查功能。本文将介...
    99+
    2023-11-20
    数据实现 增删改查功能 PHP数据库函数
  • Oracle+mybatis如何实现对数据的增删改查功能
    这篇文章主要介绍了Oracle+mybatis如何实现对数据的增删改查功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是 MyBati...
    99+
    2022-10-18
  • PHP+MySQL怎么实现数据库的增删改查操作
    PHP和MySQL是现代Web开发中最流行的技术。通过使用这两种技术,开发者可以构建动态Web应用程序,其中包括数据存储和检索。本文将介绍如何使用PHP和MySQL实现数据库的增删改查操作。一、环境配置在开始之前,我们需要确认已经配置好了P...
    99+
    2023-05-14
    php mysql 数据库
  • Android使用SQLite数据库实现基本的增删改查
    目录 一、创建activity_main和MainActivity界面 二、实现查询/删除功能创建activity_delete和DeleteActivity 三、实现添加功能创建activity_add和AddActivity  四、实...
    99+
    2023-09-15
    数据库 sqlite android java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作