5

아무 이유없이 UserManager.Create(user, password);EntityValidationErrorId이라고 말하는 이유 일 수 있습니다.UserManager.Create (user, password)를 호출하면 Id가 필요하다는 EntityValidationError가 발생합니까?

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, ApplicationUserRoleApplicationUserClaim 모두 각각 신원 클래스에서 상속합니다.

누구든지 잘못된 것이 있습니까? 나는 Id 문제없이 모든 사용자의 신원 클래스를 생성하기 전에 사용자 (UserManager.Create())를 등록 할 수 있었다

UPDATE :.. 데이터베이스 컨텍스트에서 자동 생성 키를 끊었다 그것은 키에 대한 string를 지정하는 것 같다 즉 내 추측. 나를 Id을 설정하는 것이 지금 찾고있다. 나는 그것이 내가 User에 사용자 정의 필드를 생성하기 전에했던 방식으로 작동하려면, 싶지 않아.

+0

id 문제 : http://stackoverflow.com/questions/22721011/aspnet-identity-custom-user-and-custom-role-should-be-simple-what-am-i-missing/22746674 # 22746674 –

답변

0

을 시도 할 수있는 또 다른 것은 ApplicationUser의 매개 변수가없는 생성자에 ID를 추가하는 것입니다

public class ApplicationUser : IdentityUser<string, IdentityUserLogin, ApplicationUserRole, IdentityUserClaim>, IUser 
{ 
    public ApplicationUser() 
     : base() 
    { 
     this.Id = Guid.NewGuid().ToString(); 
    } 
... 
0

메소드 Create()에는 ID가 필요합니다.

난 그냥 같이 IdentityUser 상속 :

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

나는 그것이 ID를 포함합니다 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() 메서드는 채워진 ID가있는 ID ApplicationUser가없는 UserViewModel을 변환합니다.

관련 문제