EF添加和修改
(1)//添加操作
        public bool addDate() 
        {
            try
            {
                //声明上下文
                a_context = new AEntities();
                //声明数据模型实体
                //执行代码时候会先验证这些属性值是否符合约束,不然验证过不去就不会往下执行了
                b1 = new Table_1();
                b1.age = 20;
                b1.name = "大沙漠";
                //用上下文进行操作(上下文可以理解为就是数据库,就是对数据库进行操作)
                //通过上下文指定数据表Table_1进行操作
                //传入实例,Add是添加操作的一个封装操作
                //和a_context.Entry<Table_1>(b1).State = EntityState.Added;是一样的
                a_context.Table_1.Add(b1);
                //告诉上下文,把表的变化保存到数据库
                a_context.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
(2)//更新操作
        public bool update() 
        {
            try
            {
                a_context = new AEntities();
                b1 = new Table_1();
                //修改时候属性值要写全,不然会报错
                //属性值要符合表的约束规范,不能为空的就不能为空,最大值为10就不能超过10
                b1.name = "小山";
                b1.age = 10;
                //修改表实体,唯一标识符(一般是ID)要表面,底层对应sql语句的where条件,这是必须的
                //记住修改和删除时候【必须添加】唯一标识符主键(id),这是把它理解为sql语句操作就对了
                b1.id = 1;
                //操作数据库的一个入口,指定泛型操作对象实例,State是状态的意思,指定Entry操作状态
                //添加状态Added,修改Modified,删除Deleted,未改变的Unchanged.,分离(上下文和表分离,不再跟踪表实体变化,起到释放控制的作用,基本不用)Detached
                //Entry<Table_1>这个泛型可以省略
                a_context.Entry<Table_1>(b1).State = EntityState.Modified;
                //可以一次进行多次更,删除,改操作。
                b1 = new Table_1();
                b1.name = "小李";
                b1.age = 14;
                b1.id = 2;
                a_context.Entry<Table_1>(b1).State = EntityState.Modified;
                b1 = new Table_1();
                b1.name = "小河流";
                b1.age = 15;
                b1.id = 3;
                a_context.Entry<Table_1>(b1).State = EntityState.Modified;
                //变化更新到数据中,就是执行sql语句
                //这里的保存变化是针对整个表进行操,不是某个sql语句执行,不管你对表进行多少才操作,这里只管把这个表更新到数据库中
                //虽然不对,但可以这样理解他是把我们操作后的表整个替换掉数据库中的表的感觉,只是一种理解,真正的是变化是执行了相应的sql语句
                a_context.SaveChanges();
            
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
(3)//只针对某单列或多列更新
        public bool updateOne() 
        {
            try
            {
                a_context =new AEntities();
                b1 = new Table_1();
                b1.name = "小明";
                b1.id = 1;
                //Attach表示附加的意思,要进行单列操作,首先要把指定附加在上下文,别管这是什么逻辑,这是要求,不写就不行,估计默认是Detached状态吧
                a_context.Table_1.Attach(b1);
                //还是指定表实例a_context.Entry<Table_1>(b1)
                //Property是属性的意思,泛型指定属性类型(这里是字符串)
                // => 是lambda表达式,是匿名函数简化的写法,=>前面的是参数,后面的是函数体。
                //xx就是自己命名的匿名函数
                //IsModified表示从数据库加载一个值,进行修改后再把修改保存回数据库,就是更改的意思。这是告诉上下文,我只对指定的这个属性进行修改而已
                //这是一种强类型写法,属性类型是不会写错的,是通过点.出来,是编译后的结果 
                a_context.Entry<Table_1>(b1).Property<string>(xx => xx.name).IsModified = true;
                //如果要修改多个列,则再加一个属性指定就行了
                //还有另外一种方法,直观点,可以看出是对name这个属性进行修改,但是这是一种弱类型写法,如果name写错了呢?
                //a_context.Entry<Table_1>(b1).Property("name").IsModified = true;
                a_context.SaveChanges();
              
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号