Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 属性“StatusId”是对象密钥信息的一部分,无法修改_C# - Fatal编程技术网

C# 属性“StatusId”是对象密钥信息的一部分,无法修改

C# 属性“StatusId”是对象密钥信息的一部分,无法修改,c#,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(); } 我不太

当我试图修改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();
}

我不太熟悉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();

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

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

试试这个:

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

不能更改标识列的值。如果您想了解有关实体框架的更多信息,请通过谷歌搜索它。如果你有一个你找不到答案的特定问题,那么来这里问它。