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,
}
{
// 摘要:
// 对象存在,但没有被跟踪。 在创建实体之后、但将其添加到对象上下文之前,该实体处于此状态。 通过调用 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);
}
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);
}
{
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);
}
{
// 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();
}
}
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();
}
}
*-------------------------------------------------------------------------------------------------------------------------------------------*
每一段代码是一级小阶梯,我每爬上一级,就更脱离畜生而上升到人类,更接近美好生活!