2014-07-20 18 views
5

Próbuję (ale się nie uda) wdrożyć MVC UserManager na mojej stronie. Myślałem, że moja sprawa jest dość banalna. Mam klasę User (Entity Framework - Database first), która zawiera wszystkie informacje o użytkowniku. Nie każdy użytkownik z domeny User ma dostęp do witryny. Tak więc w moim ApplicationUser istnieje link do tej klasy. W kodzie wygląda to tak:MVC 5 UserManager: Typ jednostki ApplicationUser nie jest częścią modelu dla bieżącego kontekstu

public partial class User 
{ 
    public int Id { get; set; } 
    public string Firstname { get; set; } 
    public string Lastname { get; set; } 
    public string Email { get; set; } 
} 

public class ApplicationUser : IdentityUser 
{ 
    public virtual Entities.User UserInfo { get; set; } 

    public ApplicationUser() 
    { 
     UserInfo = new Entities.User(); 
    } 
} 

podczas wywoływania CreateUserAsync -method w kontrolerze, to wszystko idzie źle. Poniżej znajdziesz mój kod kontrolera.

public class AccountController : BaseController 
{ 
    public UserManager<ApplicationUser> UserManager { get; private set; } 

    public async Task<ActionResult> Register(RegisterViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      var dbUser = new User 
      { 
       Firstname = model.FirstName, 
       Lastname = model.LastName, 
       Email = model.UserName 
      }; 
      db.Users.Add(dbUser); 
      db.SaveChanges(); 

      var appUser = new ApplicationUser(model.UserName); 
      appUser.UserInfo = dbUser; 

      try 
      { 
       var result = await UserManager.CreateAsync(appUser, model.Password); 
      } 
      catch (Exception e) 
      { 
       db.Users.Remove(dbUser); 
       db.SaveChanges(); 
      } 
     } 
    } 
} 

CreateUserAsync -method daje następujący błąd: The entity type ApplicationUser is not part of the model for the current context.

Teraz moje pytania:

  1. robię to z „mvc' drogi? Uważam, że to dużo pracy za coś, co moim zdaniem jest banalne.
  2. Jeśli nie, czy jest lepszy sposób na osiągnięcie tego?
+0

Skąd pochodzi UserManager? –

+0

Domyślny UserManager, który otrzymasz podczas tworzenia projektu MVC5. Zaktualizowałem kod – Thijs

Odpowiedz

3

Problem polega na tym, że próbujesz dodać użytkownika dodanego do jednego DbContext do użytkownika ApplicationUser dodanego do innego kontekstu DbContext (utworzonego przez menedżera UserManager).

Zamiast tego należy wykonać to jako pojedynczą operację. Wystarczy to zrobić:

var dbUser = new User 
{ 
    Firstname = model.FirstName, 
    Lastname = model.LastName, 
    Email = model.UserName 
}; 
var appUser = new ApplicationUser(model.UserName); 
appUser.UserInfo = dbUser; 
try 
{ 
    var result = await UserManager.CreateAsync(appUser, model.Password); 
} 
catch (Exception e) 
{ 
    // show error or whatever 
} 
+0

Potrzebuję innego połączenia w web.config, a wtedy to podejście działa. Dzięki! – Thijs

Powiązane problemy