• EntityState 枚举的5中状态的变化 Murray




    public enum EntityState
        {
            // 摘要:
            
    //     对象存在,但没有被跟踪。 在创建实体之后、但将其添加到对象上下文之前,该实体处于此状态。 通过调用 System.Data.Objects.ObjectContext.Detach(System.Object)
            
    //     方法从上下文中移除实体后,或者使用 System.Data.Objects.MergeOption.NoTrackingSystem.Data.Objects.MergeOption
            
    //     加载实体后,该实体也会处于此状态。 没有 System.Data.Objects.ObjectStateEntry 实例与状态为 System.Data.EntityState.Detached
            
    //     的对象关联。
            Detached = 1,
            //
            
    // 摘要:
            
    //     自对象附加到上下文中后,或自上次调用 System.Data.Objects.ObjectContext.SaveChanges() 方法后,此对象尚未经过修改。
            Unchanged = 2,
            //
            
    // 摘要:
            
    //     对象为新对象,并且已添加到对象上下文,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges()
            
    //     方法。 在保存更改后,对象状态将更改为 System.Data.EntityState.Unchanged。 状态为 System.Data.EntityState.Added
            
    //     的对象在 System.Data.Objects.ObjectStateEntry 中没有原始值。
            Added = 4,
            //
            
    // 摘要:
            
    //     对象已从对象上下文中删除。 在保存更改后,对象状态将更改为 System.Data.EntityState.Detached。
            Deleted = 8,
            //
            
    // 摘要:
            
    //     对象上的一个标量属性已更改,但尚未调用 System.Data.Objects.ObjectContext.SaveChanges() 方法。 在不带更改跟踪代理的
            
    //     POCO 实体中,调用 System.Data.Objects.ObjectContext.DetectChanges() 方法时,已修改属性的状态将更改为
            
    //     System.Data.EntityState.Modified。 在保存更改后,对象状态将更改为 System.Data.EntityState.Unchanged。
            Modified = 16,
        }

    EF里一共有这五中生命状态类型  看名字可以大概猜测出个一二三来~~  游离的 未改变的  新添加的  已删除的 修改的  但是是怎么变化?在后面的代码中实践与证实

      public ActionResult Details(int id)     

       {            
       Student student= db.Students.Find(id);
       EntityState statebefore = db.Entry(student).State; //通过find取出来得到的状态是  Unchanged          
       return View(student);      
      }

     通过调试 我们可以看到 通过find取出来得到的状态是  Unchanged  没有变化的~~

     [HttpPost]        

    public ActionResult Create(Student student)        
    {            
    try            
    {                
    // TODO: Add insert logic here                
    if (ModelState.IsValid)                
    {                    
    EntityState statebefore = db.Entry(student).State;  //Detached                     
    db.Students.Add(student);                    
    EntityState stateAdd = db.Entry(student).State; //Added                    
    db.SaveChanges();                    
    EntityState stateafter = db.Entry(student).State;//Unchanged                    
    return RedirectToAction("Index");                
    }           
     }            
    catch            
    {                
    ModelState.AddModelError("""Unable to save changes. Try again, and if the problem persists see your system administrator.");                       
     }            
    return View(student);        
    }

     生命周期的变化  Detached--->Added---->Unchanged

      [HttpPost]        

    public ActionResult Edit(Student student)        
    {                
    // TODO: Add update logic here                
    if (ModelState.IsValid)                
    {                    
    EntityState statebefore = db.Entry(student).State;
    db.Entry(student).State = EntityState.Modified; 
    int i= db.SaveChanges();                    
    EntityState stateafter= db.Entry(student).State; 
    return RedirectToAction("Index");               
     }            
    return View(student);       
     }

     生命周期的变化  Detached--->Modified---->Unchanged

      public ActionResult DeleteConfirmed(int id)        

    {            
    try            
    {               
     // TODO: Add delete logic here                
    Student student = db.Students.Find(id);  
    EntityState statebefore = db.Entry(student).State;
     //UnChange状态      
    db.Students.Remove(student);  
     EntityState stateafter =db.Entry(student).State;//Deleted状态
    db.SaveChanges();                
    EntityState stateaOk = db.Entry(student).State;//Detached状态                
    return RedirectToAction("Index");
                }            
    catch            
    {                
    return View();          
      }       
     }
    *-------------------------------------------------------------------------------------------------------------------------------------------* 每一段代码是一级小阶梯,我每爬上一级,就更脱离畜生而上升到人类,更接近美好生活!
  • 相关阅读:
    迭代器Iterator与ConcurrentModificationException详解
    多线程 ForkJoinPool
    (转)面向对象——UML类图设计
    网络基础知识-网络协议
    Python 浅析线程(threading模块)和进程(process)
    一篇文章详解python的字符编码问题
    浅析文本挖掘(jieba模块的应用)
    浅析网站的基本构成和主要类型
    python 常用算法学习(1)
    浅谈使用git进行版本控制
  • 原文地址:https://www.cnblogs.com/Murray/p/2935052.html
Copyright © 2020-2023  润新知