2015-08-08 9 views
5

Jestem nowy w MVC 5 i próbuję skonfigurować indywidualną autoryzację użytkownika w nowym kontekście bazy danych, ale ApplicationDBContext nie tworzy tabel AspNetUser w mojej nowej bazie danych. Czy ktoś może wskazać mi właściwy kierunek?MVC 5 Nie Automatyczne tworzenie tabel AspNetUser w DB

Błąd

The entity type ApplicationUser is not part of the model for the current context. 

IdentityModel.cs

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("MyEntities", throwIfV1Schema: false) 
    { 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

Web.config

<connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-MVC5.WebSite-20150723075149.mdf;Initial Catalog=aspnet-MVC5.WebSite-20150723075149;Integrated Security=True" providerName="System.Data.SqlClient" /> 
    <add name="MyEntities" connectionString="metadata=res://*/Models.UserModel.csdl|res://*/Models.UserModel.ssdl|res://*/Models.UserModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=devserver;initial catalog=MyEntities;user id=user;password=pass;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

znam MVC jest suppo Sed automatycznie tworzy Magazyn Użytkownika i powiązane tabele, ale wyraźnie zrobiłem tutaj coś zupełnie głupiego. Każda pomoc jest doceniana.

+0

Czy próbowałeś umieścić na niej jakieś dane? EF nie tworzy DB, dopóki nie umieścisz niektórych danych i nie wywołasz metody SaveChanges()! –

+0

Brak danych jeszcze .. – ExceptionLimeCat

Odpowiedz

3

Czy korzystasz z pierwszych migracji kodu?

Zazwyczaj należy włączyć migracje, utworzyć nowe migracje i zastosować je w celu utworzenia bazy danych.

Go w pakiecie konsola menedżera i wykonaj następujące polecenia

enable-migrations 
add-migration initial 
update-database 

EDIT

jeśli nie chcesz korzystać z migracji, można także umieścić to w konstruktorze context:

Database.SetInitializer<ApplicationDbContext>(new DropCreateDatabaseIfModelChanges<ApplicationDbContext>()); 

ale stracisz spędzaj danych db jest ponownie tworzony

4

OK, robiłem coś głupiego. Zasadniczo próbuje uzyskać ApplicationDbContext do korzystania z połączenia, które zostało utworzone przez EF. Nie jest to właściwa droga. Aby utworzyć tabele "automatycznie-magicznie" stworzony. Musiałem dodać normalny ciąg połączenia do mojego Web.config łączącej do żądanego DB następnie ustawić, że w IdentityModel.cs

Web.config

<connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-MVC.WebSite-20150723075149.mdf;Initial Catalog=aspnet-MVC.WebSite-20150723075149;Integrated Security=True" providerName="System.Data.SqlClient" /> 
    <add name="MyConnection" connectionString="Data Source=devserver;initial catalog=MyCatalog;user id=user;password=pass;Integrated Security=True" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

IdentityModel.cs

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("MyConnection", throwIfV1Schema: false) 
    { 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

Mamy nadzieję, że to pomoże komuś. Dziękuję wszystkim, którzy pomogli.

+0

Ta odpowiedź powinna być bardziej oczywista w Internecie. Robię przeróbkę aplikacji, która była DBFirst i potrzebna do aktualizacji bazy danych. Wszystkie inne modele znalazły się ładnie, po prostu nie mogły się domyślić, dlaczego nie zrobiły automatycznego tworzenia w nowej bazie danych. – DarthJam

0

Używam DB najpierw, zmodyfikowałem odpowiedź ExceptionLimeCat, aby działało w moim systemie. Przy niezmodyfikowanej odpowiedzi nie rejestrował ani nie zezwalał na logowanie, ani nie wyświetlał linku rejestracyjnego, ani nie tworzył automatycznego tworzenia magii, ale wyrzucił wyjątek wymuszając to. Oto modyfikacja Web.config aby pracować

<connectionStrings> 
<add name="DefaultConnection" connectionString="data source=devserver;initial catalog=MyCatalog;user id=user;password=pass" providerName="System.Data.SqlClient" /> 
<add name="MyConnection" connectionString="metadata=res://*/Models.MyCatalog.csdl|res://*/Models.MyCatalog.ssdl|res://*/Models.MyCatalog.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=devserver;initial catalog=MyCatalog;user id=user;password=pass;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Może to być pomocne dla tych, którzy uważają powyższe odpowiedzi złożone lub mają jakieś inne wyzwanie.

2
<add name="DefaultConnection" connectionString="Server=yourservername;Database=yourdbname;User Id=yourusername;Password=yourpassword;" providerName="System.Data.SqlClient" /> 

po prostu wprowadź ten ciąg połączenia w web.config, a następnie uruchom aplikację, niż zarejestruj konto. sprawdź teraz swoją bazę danych.