• MVC的EF编辑,不用查询直接修改


    EF中会为每个 管理的 实体对象 创建一个代理包装类对象,其中会跟踪 实体对象 的状态和每个属性的状态;
    一、通常使用EF更新的方式,先查询出要修改的数据,然后再修改新的值;实体对象被修改的属性 在 代理包装类对象里 的对应属性状态会被修改记录下修改状态,等到调用SaveChanges时,EF会遍历其管理的每个实体对象,并根据其 包装类对象 的状态,生成增删改查sql语句并执行;
    此例中修改操作,会生成 修改的sql语句(注意:此处只为修改过的属性生成sql语句),最后执行。
    缺点:修改先还要查询,难受~~~~
     
    //T_TEST2(ID,NAME)

    ////edit 先查询再修改
    EFDBReferenceEntities EFDB = new EFDBReferenceEntities();
    T_TEST2 t2 = new T_TEST2();
    t2.ID = 5;
    T_TEST2 temp = EFDB.T_TEST2.Where(u => u.ID == t2.ID).FirstOrDefault();
    temp.NAME = "YYYY";
    EFDB.SaveChanges();

    //edit 直接修改,不需查询

    EFDBReferenceEntities EFDB = new EFDBReferenceEntities();
    T_TEST2 t2 = new T_TEST2(); 
    t2.ID = 5;
    t2.NAME = "HHHHH";
    //1 添加到管理容器中,并获得沩包装类对象
    DbEntityEntry<T_TEST2> entry = EFDB.Entry<T_TEST2>(t2);
    //如果使用entry附加实体对象的数据容器中,则需手动设置 实体包装类的对象 的状态为unchanged
    //如果使用attach就不需要这句
    entry.State = EntityState.Unchanged;
    //2 标识实体对象的某些属性已经被修改
    entry.Property("NAME").IsModified = true;
    //3 更新到数据库
    EFDB.SaveChanges();

  • 相关阅读:
    海量的数据的处理
    leetcode(135)分发糖果
    leetcode(130)被围绕的区域
    排序算法
    leetcode(956)最高的广告牌
    kafka的配置
    kafka命令行
    leetcode(76)最小覆盖子串
    Vue开发全解
    idea eclipse 设置代理
  • 原文地址:https://www.cnblogs.com/adolphyang/p/4679658.html
Copyright © 2020-2023  润新知