专栏首页跟着阿笨一起玩NET【C#】Entity Framework 增删改查和事务操作

【C#】Entity Framework 增删改查和事务操作

1、增加对象  

            DbEntity db = new DbEntity();
            //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长主键外),如果不赋值,则会数据库中会被设置为NULL(注意是否可空)
            var user = new User
                {
                    Name = "bomo",
                    Age = 21,
                    Gender = "male"
                };
            db.User.Add(user);
            db.SaveChanges();

2、删除对象,删除只需要对象的主键

            DbEntity db = new DbEntity();
            //删除只需要主键,这里删除主键为5的行
            var user = new User {Id = 5};

            //将实体附加到对象管理器中
            db.User.Attach(user);
            //方法一:
            db.User.Remove(user);
            //方法二:把当前实体的状态改为删除
            //db.Entry(user).State = EntityState.Deleted;
            db.SaveChanges();

3、修改对象

  方法一:

            DbEntity db = new DbEntity();
            //修改需要对主键赋值,注意:这里需要对所有字段赋值,没有赋值的字段会用NULL更新到数据库
            var user = new User
                {
                    Id = 5,
                    Name = "bomo",
                    Age = 21,
                    Gender = "male"
                };
            //将实体附加到对象管理器中
            db.User.Attach(user);
            //把当前实体的状态改为Modified
            db.Entry(user).State = EntityState.Modified;
            db.SaveChanges();

  方法二:方法一中每次都需要对所有字段进行修改,效率低,而且麻烦,下面介绍修改部分字段

            DbEntity db = new DbEntity();
            //修改需要对主键赋值,注意:这里需要对所有字段赋值,没有赋值的字段会用NULL更新到数据库
            var user = new User
                {
                    Id = 5,
                    Name = "bomo",
                    Age = 21
                };
            //将实体附加到对象管理器中
            db.User.Attach(user);
            
            //获取到user的状态实体,可以修改其状态
            var setEntry = ((IObjectContextAdapter) db).ObjectContext.ObjectStateManager.GetObjectStateEntry(user);
            //只修改实体的Name属性和Age属性
            setEntry.SetModifiedProperty("Name");
            setEntry.SetModifiedProperty("Age");

            db.SaveChanges();

4、使用事务:使用事务很简单,只要把需要的操作放在 TransactionScope 中,最后提交

            DbEntity db = new DbEntity();
            using (var scope = new TransactionScope())
            {
                //执行多个操作
                var user1 = new User
                {
                    Name = "bomo",
                    Age = 21,
                    Gender = "male"
                };
                db.User.Add(user1);
                db.SaveChanges();
                
                var user2 = new User
                {
                    Name = "toroto",
                    Age = 20,
                    Gender = "female"
                };
                db.User.Add(user2);
                db.SaveChanges();

                //提交事务
                scope.Complete();
            }

5、查询:查询通过LinQ查询

            DbEntity db = new DbEntity();
            //选择部分字段
            var user = db.User.Where(u => u.Name == "bomo").Select(u => new {Id = u.Id, Name = u.Name, Age = u.Age}).FirstOrDefault();
            //只有调用了FirstOrDefault, First, Single, ToList, ToArray等函数才会执行对数据库的查询

  查询基本都是LinQ的内容,内容有点多,下次在总结

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Datatable删除行的Delete和Remove方法

    1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index);可以直接删除行

    跟着阿笨一起玩NET
  • C# 使用SqlBulkCopy类批量复制大数据

    特别注意  sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].Col...

    跟着阿笨一起玩NET
  • 用 XML 文件持久化和恢复图片信息

    跟着阿笨一起玩NET
  • 审计SEMCMSv2.7之捡来的两个洞加漏洞复现

    在 SEMCMS php v2.7 审计之前,我会去看看要审计的CMS官网是否存在手册说明什么的,然后去会各个漏洞公布平台找找它以前的老漏洞,复现下是否修复及修...

    信安之路
  • SpringCloud-Hystrix【解决灾难性雪崩-熔断】

      熔断其实是在降级的基础上引入了重试的机制。当某个时间内失败的次数达到了多少次就会触发熔断机制,具体的流程如下

    用户4919348
  • 运维开发的痛点和思考

    jeanron100
  • Novate 一款Android RxStyle的网络框架

    去年我写了一个Android网络框架Novate, 基于Retrofit和RxJava封装的链式网络框架, 支持okhttp的调用分格,又兼容Retrofit注...

    开发者技术前线
  • leepcode作业解析 - 5-19

    函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。

    py3study
  • 运维知识体系v3.1 & Web缓存知识体系v3.0

    前段时间,发现新运维社区的赵班长(赵舜东)更新了一版《运维知识体系 v3.1》其中新增了一些目前比较火的、成熟的开源工具和解决方案,也包括容器编排,微服务框架l...

    公众号: 云原生生态圈
  • 五大层面详解智能手机创新天花板

    苹果失去创新已不是什么新观点,前段时间新发布的iOS 14也有不少人戏谑是“掏空安卓”。事实上,真有点为难苹果了,近几年智能手机领域的跃进式创新几乎绝迹,更多的...

    刘旷

扫码关注云+社区

领取腾讯云代金券