EntityState 枚举的5中状态的变化



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();          
  }       
 }

 

 

posted @ 2013-02-27 13:41  -Murray-  阅读(1201)  评论(0编辑  收藏  举报