C# 属性“StatusId”是对象密钥信息的一部分,无法修改
当我试图修改rm.StatusId=3时,我正在使用实体框架; 我得到了标题问题的错误。 另外,请给我链接,让我了解asp.net控件的实体框架的每一个细节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(); } 我不太
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();
不能更改标识列的值。如果您想了解有关实体框架的更多信息,请通过谷歌搜索它。如果你有一个你找不到答案的特定问题,那么来这里问它。