属性“StatusId”是对象的关键信息的一部分,无法修改

时间:2012-05-26 08:42:17

标签: c#

当我尝试修改rm.StatusId = 3;时,我正在使用实体框架工作  我得到标题问题错误。 另外,请给我链接,了解asp .net控件的实体框架的每一个和所有内容。

if (chk.Checked == true)
{
   MAtt_RequestMaster rm =
      ctx.MAtt_RequestMaster.SingleOrDefault(p => p.AutoID ==id);
   rm.StatusId = 3;
   ctx.SaveChanges();
}

2 个答案:

答案 0 :(得分:0)

我不太熟悉lambda表达式,但我认为你可以这样做:

 MAtt_RequestMaster rm =
  ctx.MAtt_RequestMaster.SingleOrDefault(p => p.AutoID ==id);

rm.YourStatusTable = (from x in ctx.YourStatusTable
                     where x.statusID == 3
                       select x).FirstOrDefault();

ctx.SaveChanges();

答案 1 :(得分:0)

发生此问题的原因是您多次引用同一个对象。这不是EF的限制,而是一种安全功能,可确保您不会插入具有两个不同ID的同一对象。因此,要实现您要执行的操作,只需创建一个新对象并将新创建的对象添加到数据库中。

**这个问题经常发生在循环中。如果您正在使用while或foreach循环,请确保将新创建的对象INSIDE循环体。

试试这个:

MAtt_RequestMaster rm = new Matt_RequestMaster();
rm.StatusId = 3;
ctx.MAtt_RequestMasters.Attach(rm);
ctx.SaveChanges();