运行Edit [Post]方法时出现以下错误:
附加类型为' MyType.Models.ApplicationUser'的实体失败,因为同一类型的另一个实体已具有相同的主键值。使用'附加'方法或将实体的状态设置为“未更改”#39;或者'修改'如果图中的任何实体具有冲突的键值。这可能是因为某些实体是新的并且尚未收到数据库生成的键值。在这种情况下,请使用'添加'方法或“添加”#39;实体状态跟踪图形,然后将非新实体的状态设置为“未更改”。或者'修改'酌情。
我创建了一个包含所有必填字段的ApplicationUser类(Identity框架)的新实例,并将其保存到现有用户的数据库中,作为对用户的响应"编辑" [发布]动作,' db'是MyDbContext类型的私有变量。我简化了可读性代码。
这是我的控制器:
public ActionResult Edit([Bind(Include = "Id,a,b,c,d,e")] ModelClass editParam)
{
ApplicationUser user = new ApplicationUser()
{
Id = editParam.Id,
a= editParam.a,
b = editParam.b,
c= editParam.c,
d= editParam.d,
e= editParam.e,
};
string[] userRoles = editParam.Roles.Split(new[] { ", " }, StringSplitOptions.None);
var userStore = new UserStore<ApplicationUser>(db);
var userManager = new UserManager<ApplicationUser>(userStore);
userManager.RemoveFromRoles(user.Id, GetAllUserRoles());
userManager.AddToRoles(user.Id, userRoles);
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("UsersList");
}
这是我的模特课:
public class ModelClass
{
public string Id { get; set; }
[Required]
public string a { get; set;}
[Required]
public string b { get; set; }
[Required]
public string c { get; set; }
[Required]
public string d { get; set; }
[Required]
public string e { get; set; }
[Required]
public string f { get; set; }
[Required]
public string g { get; set; }
[Required]
public string h { get; set; }
public int i { get; set; }
}
答案 0 :(得分:0)
你能告诉我当你尝试这件事时会发生什么吗?:
DownloadsFragment.refreshFragment();