EntityState.Modified错误"相同类型的实体已具有相同的主键值"

时间:2017-06-14 16:38:58

标签: c# asp.net asp.net-mvc entity-framework asp.net-identity

运行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; }
    }

1 个答案:

答案 0 :(得分:0)

你能告诉我当你尝试这件事时会发生什么吗?:

DownloadsFragment.refreshFragment();