【问题标题】:Validation failed for one or more entities. User Name is already taken?一个或多个实体的验证失败。用户名已被占用?
【发布时间】:2017-03-12 10:06:36
【问题描述】:

我有两个表:TasksUsers (ApplicationUser),它们之间存在多对多关系,我使用的是 Microsoft Identity 的预定义表用户, 当我更新现有的Task 并为其分配新用户时:

  var taskToUpdate = context.Tasks.Find(taskVM.Id);
        context.Entry(taskToUpdate).State = EntityState.Modified;
        taskToUpdate.Users = new List<ApplicationUser>();
        foreach (var user in taskVM._Users)
        {
            var userDB = context.Users.Find(user.Id);
            context.Entry(userDB).State = EntityState.Unchanged;
            taskToUpdate.Users.Add(user);
        }
        context.SaveChanges();

但是当SaveChanges 被调用时,我得到了这个错误:

一个或多个实体的验证失败。看 'EntityValidationErrors' 属性以获取更多详细信息。

在 EntityValidationErrors 中:

ErrorMessage = "用户名 Sohaib 已被占用。" 属性名用户

【问题讨论】:

    标签: entity-framework ef-code-first asp.net-identity


    【解决方案1】:

    在调用 .Users.Add 方法时,EF 假定您正在添加新实体,从而创建新的用户记录并引发异常

    可能的解决方案是

    var taskToUpdate = context.Tasks.Find(taskVM.Id);
    taskToUpdate.Users = taskVM.Users;
    context.SaveChanges();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 2020-02-02
      • 1970-01-01
      相关资源
      最近更新 更多