zoukankan      html  css  js  c++  java
  • EFEntity 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的内容,内容有点多,下次在总结

  • 相关阅读:
    文本框设置只读,后台可获取
    div 在同一行的 CSS处理
    在标签中添加属性
    (转)如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)
    (转)如何使用ModelSim對Megafunction或LPM作仿真? (SOC) (MegaCore) (ModelSim)
    (笔记)TSL235新型光感器件强烈推荐使用
    (转)如何增加SignalTap II能觀察的reg與wire數量? (SOC) (Quartus II) (SignalTap II)
    (转) 如何將10進位轉2進位? (C/C++) (C)
    (转)如何使用ModelSim作前仿真與後仿真? (SOC) (Quartus II) (ModelSim)
    (笔记)关于LM3S片内FLASH编程的一点建议
  • 原文地址:https://www.cnblogs.com/grj001/p/12223674.html
Copyright © 2011-2022 走看看