如何在Entity Framework里进行对象传递更新。

tintown 2009-09-29 11:29:52
//这个方法是把一个对象实例从外部传入进来,进行更新。
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
...全文
419 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyvscf 2009-09-29
  • 打赏
  • 举报
回复
MVC beta 版本结合 linq to entity 可以解决你这个功能
UpdateModel(post, new[]{ "Title", "Content", "Slug", "Tags", "Categories" }, new PostValueProvider(ControllerContext));
wjq 2009-09-29
  • 打赏
  • 举报
回复
CreateDepartment直接new一个对象,它和当前上下文并无关系,简单做法是根据pk查询出一个dept,然后修改属性并update。

但你的update方法也要修改,实体对象和entitycontext是相关的,查询,更新都应该在一个context里完成。
lyvscf 2009-09-29
  • 打赏
  • 举报
回复
我也是一年前用过linq to entity 现在都快忘记
tintown 2009-09-29
  • 打赏
  • 举报
回复
找到问题的所在了。看来这个Entity Framework还是比较麻烦的。
在进行ApplyPropertyChanges方法前,必须要保证objectContext里已经取得了一行记录,那就是意味着,如果要这样进行修改,就必须要“先从数据库里出来”--》“然后进行更新”

因此,我的那个错误也正是因为我没有去“获取”,所以代码必须要添加一句:
Department o1 = db.Department.First(p => p.Id == dept.Id);
这句话从数据库里取出此记录,虽然这个o1对象是没有任何用途了,但是已经放到objectcontext里了,下面的语句才可以正确执行。

同志们,要切记啊,这个Entity Framework还是比较麻烦的。尤其是在进行WebService需要remoting更新时。。。。

最终我可以执行的代码为:
public string UpdateDepartment(Department dept)
{
using (var db = new FlexDbEntities())
{
//这句语句千万要有啊!!!。
Department o1 = db.Department.First(p => p.Id == dept.Id);

db.ApplyPropertyChanges("Department",dept);

db.SaveChanges();
}
}


8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧