UserManager.Create (пользователь, пароль) thowing EntityValidationError говорит Id требуется?

asp.net-identity asp.net-mvc asp.net-mvc-5 entity-framework entity-framework-6

Вопрос

Кто-нибудь знает, почему UserManager.Create(user, password); может быть выбрасывание EntityValidationError Id .

Может ли это иметь какое-то отношение к моему UserManager . Он настроен следующим образом:

public class MyAppDb : IdentityDbContext<ApplicationUser, ApplicationRole, string, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
    public static MyAppDb Create()
    {
        return new MyAppDb();
    }

    public MyAppDb()
        : base("MyAppDb")
    {
    }
}


public class ApplicationUserStore : UserStore<ApplicationUser, ApplicationRole, string, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
    public ApplicationUserStore(MyAppDb context)
        : base(context)
    {
    }
}

public class ApplicationUserManager : UserManager<ApplicationUser, string>
{
    public ApplicationUserManager(IUserStore<ApplicationUser, string> store)
        : base(store)
    {
    }
}

И в контроллере:

public class AccountController : Controller
{
    public AccountController()
        : this(new ApplicationUserManager(new ApplicationUserStore(new MyAppDb())))
    {
    }

    public AccountController(ApplicationUserManager userManager)
    {
        UserManager = userManager;
        UserManager.PasswordValidator = (IIdentityValidator<string>)new MinimumLengthValidator(8);
        UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false, RequireUniqueEmail = true };
    }

    public ApplicationUserManager UserManager { get; private set; }

    ...
}

ApplicationUser , ApplicationRole , ApplicationUserLogin , ApplicationUserRole и ApplicationUserClaim все наследуют от классов Identity соответственно.

Кто-нибудь видит что-то не так? Мне удалось зарегистрировать пользователей ( UserManager.Create()) прежде чем я создал все пользовательские классы Identity без проблемы Id .

UPDATE: Кажется, задание string для ключа разбило автогенерированный ключ в контексте базы данных. Это мое лучшее предположение. Теперь я ищу, чтобы я установил Id . Я не хочу, я хочу, чтобы он работал так, как он делал, прежде чем я создал пользовательские поля в User .

Принятый ответ

Кажется, UserStore string сообщает UserStore что вы предоставите Id . Эта проблема исчезла, когда я решил следующую проблему. Есть ли способ создать пользовательский пользователь и роль без указания TKey на IdenitityUser, IdentityRole и IdentityDbContext?

-ИЛИ-

Просто дайте ему id : Guid.NewGuid().ToString()


Популярные ответы

Метод Create () требует идентификатора.

Я просто унаследовал IdentityUser следующим образом:

public class ApplicationUser : IdentityUser
{
  // Rest of your implmentation...
}

Когда я создаю новый экземпляр ApplicationUser, он будет содержать идентификатор.

public static ApplicationUser GetUser(this UserViewModel model)
    {
        var applicationUser = new ApplicationUser
        {
            DisplayName = model.DisplayName,
            Email = model.Email,
            EmailConfirmed = model.EmailConfirmed,
            UserName = model.UserName,
            Description = model.Description,
            LastSignOn = model.LastSignOn
        };

        return applicationUser;
    }

Метод GetUser () преобразует UserViewModel, который не имеет ID ApplicationUser с заполненным идентификатором.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему