专栏首页技术博客Entity Framework 简单增删改操作

Entity Framework 简单增删改操作

前言

 在 Entity Framework 简单查询操作 中主要是学习了在Entity Framework中的几种不同模式的查询操作,现在主要来学习一下简单的增加、删除、修改操作。

增加

  在EF中添加操作一般有两种方式:一是直接创建对象,然后调用“DbSet”的”Add()”方法进行添加;二是调用数据库上下文的”Entry()”方法并设置对应的状态。无论使用哪种方式最终一定要调用“SaveChange()”进行提交。如:

            using (var db = new EFContext())
            {
                var stephen = new Person
                {
                     PersonName="aehyok0001",
                     Age=25,
                     Address="深圳南山",
                     Email="aehyok@163.com"
                };
                db.Persons.Add(stephen);

                var jeffrey = new Person
                {
                    PersonName = "aehyok0002",
                    Age = 25,
                    Address = "深圳宝安",
                    Email = "Leo@163.com"
                };
                db.Entry(jeffrey).State = EntityState.Added;
                db.SaveChanges();
            }

执行后效果如下

 此外,在含有导航属性时,将一个对象赋值给另一个对象的导航属性也能达到添加的效果(当导航属性为”DbSet“集合时通过调用导航属性的“Add()“方法也同样可以达到添加效果)。

状态跟踪

 在这里我们需要强调一点那就是状态跟踪,对于上面的操作如果我们调用“Attach()”方法对实体进行跟踪或者设置实体的状态那么数据将不会保存到数据库:

这两句添加任何一句效果都是一样的,就是都没有保存到数据库中。

使用”Attach()”方法进行实体跟踪时会设置实体的状态为“Unchanged”此时实体处于未修改状态,当执行“SaveChange()”方法时EF不会执行修改操作。相反如果此时设置实体状态为“Modified”则EF执行更新操作。那么既然EF的数据修改操作(增加、更新、删除)是根据实体状态而进行的,那么为什么之前我们的增加操作能正常进行而不用手动修改其状态呢?原因是EF会自动发现状态改变,在调用下面的方法时状态发现是自动的:  

当然,并不是所有的时候我们都需要EF自动发现状态改变,设置 “DbContext.Configuration.AutoDetectChangesEnabled”属性为“false”可以禁用自动发现功能。

删除

 现在来看一下Entity Framework的删除操作

            using (var db = new EFContext())
            {
                var person = db.Persons.Where(m => m.PersonId == 4).FirstOrDefault();
                db.Persons.Remove(person);
                db.SaveChanges();
            }

当然有了上面状态跟踪的讨论相信大家也可以想到如下删除方法:

            using (var db = new EFContext())
            {
                var person = db.Persons.Where(m => m.PersonId == 5).FirstOrDefault();
                db.Entry(person).State = EntityState.Deleted;
                db.SaveChanges();
            }

上面两种方法都会达到删除的目的。

修改

修改数据很简单,直接修改对应的属性即可:

            using (var db = new EFContext())
            {
                var person = db.Persons.Where(m => m.PersonId == 3).FirstOrDefault();
                person.PersonName="UpdateNewName";
                db.SaveChanges();
            }

需要说明的是,EF在执行修改操作前会检查哪些属性发生了变化,并且只会修改发生变化的字段。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 编写高质量代码改善C#程序的157个建议[匿名类型、Lambda、延迟求值和主动求值]

      从.NET3.0开始,C#开始一直支持一个新特性:匿名类型。匿名类型由var、赋值运算符和一个非空初始值(或以new开头的初始化项)组成。匿名类型有如下基本...

    aehyok
  • Entity Framework简介

    很久很久之前就想来好好的学习一下EF,一直也是各种理由导致一直也没有好好的开始,现在下定决心了,不管怎样一定要把这先走一遍,并且把自己学到的相关EF的知识进行记...

    aehyok
  • JavaScript通过RegExp实现客户端验证

    可以看到在文本框中注册了onkeypress事件,当在文本框中输入一个字符按下键盘的时候就会触发该JavaScript的函数

    aehyok
  • 「走进k8s」Docker三剑客之Docker Swarm(九)

    PS:这就是我们的服务编排,都是在三个节点,所谓的编排就是将多个节点变成一个节点来使用,接下来讲的k8s要把docker swarm功能要强大很多,当然也要复杂...

    IT故事会
  • 树莓派远程及文件传输:以呼吸参数测量及获取为例

    在组装完树莓派以后,我们需要让我们的树莓派编程“中央空调”,即:让其他电脑都可以通过远程/局域网来访问控制我们的树莓派我们的树莓派。

    代码咖啡
  • 专访 | Nature论文作者Arjun Krishnan——使用机器学习预测自闭症基因

    普林斯顿大学最新一项研究发现了一些新的与自闭症相关的候选基因。 虽然研究人员估计存在有数百个与自闭症相关的基因,但实际上只有一小部分有明确的实验证据证明其与自闭...

    AI科技评论
  • 【赵强老师】Flink的Watermark机制(基于Flink 1.11.0实现)

    在使用eventTime的时候如何处理乱序数据?我们知道,流处理从事件产生,到流经source,再到operator,中间是有一个过程和时间的。虽然大部分情况下...

    赵强老师
  • Python 与 SQLite

    --> SQLite version 3.8.2 2013-12-06 14:53:30

    py3study
  • 安装 Linux系统监控工具 systat

    sysstat 是一款开源的自由软件,其源代码开源在 GitHub ,您可以首先拉取仓库源码:

    宋天伦
  • Kubernetes 中 PV 和 PVC 的状态变化

    我们对 PV 和 PVC 的几种状态应该不算陌生,但是在使用过程中可能也会产生一些疑问,比如为什么 PVC 变成 Lost 状态了,新创建的 PVC 如何能够绑...

    我是阳明

扫码关注云+社区

领取腾讯云代金券