更新实体时出现问题

| 更新应用程序中的实体(用户)时遇到问题。 登录用户后,该实体位于会话中。所以我做到了:
Dim u as User = (From x in ctx.Users).First()
Session(\"user\") = u
好的,没问题。 但是当我需要更改用户时:
Dim u as User = Ctype(Session(\"User\"),User)
u.name = \"new name\"
ctx.Users.ApplyCurrentValues(u)
我收到以下错误:   键与   提供的对象的密钥无法   在ObjectStateManager中找到。   验证   提供的对象与键值匹配   必须更改的对象   应用。     
已邀请:
        在执行此操作之前,第一个示例不起作用:
Dim u as User = Ctype(Session(\"User\"),User)
u.name = \"new name\"
(From x in ctx.Users).First()
ctx.Users.ApplyCurrentValues(u)
ctx.SaveChanges
ApplyCurrentValues仅从传递的对象中获取值,并将它们复制到必须加载并附加到上下文的相同对象类型。 @Mlantosca显示的第二个示例无法正常工作,因为您将实体存储在会话中,并且没有分离它。要使其正常工作,您必须使用:
Dim u as User = (From x in ctx.Users).First()
ctx.Detach(u)
Session(\"user\") = u
    
        您可能想尝试一下:
ctx.Users.Attach(User);
ctx.ObjectStateManager.ChangeObjectState(User, EntityState.Modified);
ctx.SaveChanges();
这是我在EF中更新现有实体时使用的样式 -迈克尔     

要回复问题请先登录注册