日期:2014-05-20  浏览次数:20881 次

如何在Entity Framework里进行对象传递更新。
//这个方法是把一个对象实例从外部传入进来,进行更新。
  public string UpdateDepartment(Department dept)
{
  using (var db = new FlexDbEntities())
  {
  db.ApplyPropertyChanges("Department",dept);
  } 
}


//外部调用
Department de = Department.CreateDepartment(1);
de.Name = "new";
de.ParentId = 1;
....
UpdateDepartment(de);//传过去进行更新

我的期望是:通过外部的对象实例,传进去,只要是主键一样的,能进行Update操作。但以上的代码一直会报错:ObjectStateManager 不包含具有对“ServiceLibrary.Department”类型的对象的引用的 ObjectStateEntry

------解决方案--------------------
CreateDepartment直接new一个对象,它和当前上下文并无关系,简单做法是根据pk查询出一个dept,然后修改属性并update。

但你的update方法也要修改,实体对象和entitycontext是相关的,查询,更新都应该在一个context里完成。
------解决方案--------------------
MVC beta 版本结合 linq to entity 可以解决你这个功能
UpdateModel(post, new[]{ "Title", "Content", "Slug", "Tags", "Categories" }, new PostValueProvider(ControllerContext));