2015-08-08 14 views
5

Sono nuovo in MVC 5 e sto cercando di configurare l'autorizzazione utente individuale in un nuovo contesto di database creato ma ApplicationDBContext non sta creando le tabelle AspNetUser nel mio nuovo database. Qualcuno può indicarmi la giusta direzione su questo?MVC 5 Non Auto Creazione tabelle AspNetUser nel DB

errore

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> 

che conosco MVC è suppo sed per creare auto-magicamente il UserStore e le tabelle associate ma chiaramente ho fatto qualcosa di totalmente stupido qui. Ogni aiuto è molto apprezzato.

+0

Hai provato a mettere alcuni dati su di esso? EF non crea DB finché non si inseriscono alcuni dati e si chiama il metodo 'SaveChanges()!'. –

+0

non ci sono ancora dati .. – ExceptionLimeCat

risposta

3

Stai utilizzando le migrazioni prima del codice?

normalmente, è necessario abilitare le migrazioni, creare nuove migrazioni e applicarle per creare il db.

Go nella confezione della console manager e eseguire i seguenti comandi

enable-migrations 
add-migration initial 
update-database 

EDIT

se non si desidera utilizzare le migrazioni, si può anche mettere questo nel costruttore del vostro contesto:

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

ma si perderà l'everytime di dati viene ricreata l'db

4

Ok, stavo facendo qualcosa di stupido. Fondamentalmente cercando di ottenere che ApplicationDbContext utilizzi una connessione creata da EF. Non è la strada giusta Per ottenere i tavoli 'auto-magicamente' creati. Avevo bisogno di aggiungere una stringa di connessione normale alla mia Web.config connessione al DB desiderato quindi impostare che negli 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(); 
    } 
} 

Speriamo che questo aiuti qualcuno. Grazie a tutti coloro che hanno aiutato.

+0

Questa risposta dovrebbe essere davvero più evidente online. Sto eseguendo una riscrittura di un'app che era DBFirst e dovevo aggiornare il database. Tutti gli altri modelli si sono rivelati interessanti, ma non è stato possibile capire perché non ha creato automaticamente il nuovo database. – DarthJam

0

Sto utilizzando DB prima, modificato la risposta di ExceptionLimeCat per farlo funzionare sul mio sistema. Con la risposta non modificata non si registrerebbe né consentirà il login né visualizzerà il link del registro né creerà automaticamente la magia, ma genererà un'eccezione nel forzarla. Ecco la modifica al web.config per farlo funzionare

<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" /> 

Ciò forse utile a coloro che trovare le risposte di cui sopra complessa o avere qualche altra sfida.

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

basta creare questa stringa di connessione in web.config, quindi eseguire l'applicazione, piuttosto che registrare un account. controlla ora il tuo database.