【发布时间】:2015-09-19 17:37:22
【问题描述】:
我正在尝试更新实体,但实体框架不保存更改
这是我的代码
public bool updateUser(user CUser)
{
CurrentUser = (CustomPrincipal)HttpContext.Current.User;
user userToBeUpdated = context.users.Where(user => user.user_id == CurrentUser.Id).FirstOrDefault();
userToBeUpdated = CUser;
context.SaveChanges();
return true;
}
我的代码有什么问题吗?
更新
public bool updateUser(user CUser)
{
CurrentUser = (CustomPrincipal)HttpContext.Current.User;
user userToBeUpdated = context.users.Where(user => user.user_id == CurrentUser.Id).FirstOrDefault();
CUser.user_id = userToBeUpdated.user_id;
CUser.date_created = userToBeUpdated.date_created;
if (CUser.Password == "hidden")
CUser.Password = userToBeUpdated.Password;
else
CUser.Password = new Hash().GetBcryptHashedPassword(CUser.Password);
if (CUser.UDTO.File.ContentLength > 0)
{
FileHelper ProfilePicture = new FileHelper(CUser.UDTO.File, "jpg,jpeg,png", 5, true, 500, 500);
if (!checkUserPersonalImage(CUser.UDTO.File, CUser, ProfilePicture, CurrentUser))
{
return false;
}
CUser.PersonalImage = ProfilePicture.uploadFile();
}
else
{
CUser.PersonalImage = userToBeUpdated.PersonalImage;
}
if (!checkRoleValidity(CUser, CurrentUser, false, false))
{
return false;
}
if (!checkDepartmentValidity(CUser, CurrentUser, false, false))
{
return false;
}
userToBeUpdated = CUser;
context.Entry(userToBeUpdated).State = System.Data.Entity.EntityState.Modified;
context.SaveChanges();
new UserHelperMethods().updateUserHolderLists(CurrentUser.Company, CUser);
CUser.UDTO.RedirectTo = "AddNewUser";
CUser.UDTO.Message="<div class='success'>User has been updated successfully</div>";
CUser.UDTO.Company = CurrentUser.Company;
return true;
}
这是完整的功能,我收到以下错误
附加类型为“workflow.Models.user”的实体失败,因为 另一个相同类型的实体已经具有相同的主键 价值。使用“附加”方法或设置 如果实体中有任何实体,则实体的状态为“未更改”或“已修改” 图有冲突的键值。这可能是因为某些实体 是新的,尚未收到数据库生成的键值。在 这种情况下使用 'Add' 方法或 'Added' 实体状态来跟踪 图表,然后将非新实体的状态设置为“未更改”或 酌情“修改”。
【问题讨论】:
-
谢谢。您的函数不返回任何内容。你可能跳过了一些重要的事情。有没有抛出异常?
-
我刚刚注意到....除了从数据库中获取数据之外,您的函数几乎什么都不做...
-
@DevilSuichiro 没有例外
-
userToBeUpdated = CUser;并没有按照你的想法去做。 -
@Claies 我曾经通过更改其值来更新实体中的字段,然后调用`context.SaveChanges()` 例如
userToBeUpdated.X = 15; context.SaveChanges();然后它保存更改所以我认为@ 987654325@changes 和userToBeUpdated .X = 15;一样工作
标签: asp.net-mvc entity-framework