2012-05-26 26 views
0

我在尝试修改时使用实体框架工作rm.StatusId = 3; 我收到标题问题错误。 也请给我链接,以了解与asp.netnetcontrolls实体框架工作的每一件事。属性'StatusId'是对象的关键信息的一部分,无法修改

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

您不能更改标识列的值。如果您想通过Google搜索了解更多关于实体框架工作的信息,如果你有一个你找不到答案的具体问题,那就来这里问问题。 – Trisped

回答

0

IM与lambda表达式不太familliar,但我想你可以这样做:发生

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(); 
0

这个问题,因为你引用的同一对象不止一次。这不是EF的限制,而是一个安全功能,以确保您不会插入具有两个不同ID的相同对象。因此,要实现您正在尝试执行的操作,只需创建一个新对象并将新创建的对象添加到数据库即可。

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

试试这个:

MAtt_RequestMaster rm = new Matt_RequestMaster(); 
rm.StatusId = 3; 
ctx.MAtt_RequestMasters.Attach(rm); 
ctx.SaveChanges(); 
相关问题