2011-02-18 7 views
8

Non riesco a ottenere il codice EF prima di utilizzare SQL Server 2008 R2. L'errore che sto ottenendo è "Nome oggetto non valido" dbo.Movies "."Codice EF First CTP 5 e SQL SErver 2008 R2

Non sta creando la tabella automaticamente.

mia stringa di connessione:

<add name="MovieDBContext" connectionString="Server=(local); Database=Movies; Trusted_Connection=true; Integrated Security=True" providerName="System.Data.SqlClient" />

Il mio modello e il contesto classe:

public class Movie 
{ 
    public int ID { get; set; } 

    [Required(ErrorMessage = "Title is required")] 
    public string Title { get; set; } 

    [Required(ErrorMessage = "Date is required")] 
    public DateTime ReleaseDate { get; set; } 

    [Required(ErrorMessage = "Genre must be specified")] 
    public string Genre { get; set; } 

    [Required(ErrorMessage = "Price Required")] 
    [Range(1, 100, ErrorMessage = "Price must be between $1 and $100")] 
    public decimal Price { get; set; } 

    [StringLength(5)] 
    public string Rating { get; set; } 

} 

public class MovieDBContext : DbContext 
{ 
    public DbSet<Movie> Movies { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Movie>().Property(p => p.Price).HasPrecision(18, 2); 
    } 
} 

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

4

dimentico se è abilitato di default, ma provate ad impostare questo nel tuo Application_Start (abbastanza sicuro che non è)

System.Data.Entity.Database.DbDatabase.SetInitializer<MovieDBContext>(new CreateDatabaseIfNotExists<MovieDBContext>()); 
+0

Questo non era quello nel mio metodo Application_Start, ma non sembrava farlo funzionare. – Cliffboss

+0

Controlla se la tabella esiste già e se esiste già, devi assicurarti che i nomi delle tabelle corrispondano. (Oppure elimina la tabella e lascia che EF la costruisca per te) altrimenti mancheremo qualcosa come il metodo sopra, quando chiamato in Application_Start funzionerebbe. – Buildstarted

+0

Sono tornato indietro e ho rifatto molto del tutorial che ho seguito + ha fatto ciò che hai suggerito e ora funziona. Cheers. – Cliffboss

0
protected override void OnModelCreating(ModelBuilder modelBuilder) { 
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
} 

Speranza che aiuta

+0

Questo non ha impedito il suo funzionamento. – Cliffboss

1

Heres il mio attuale configurazione (sostituire le protezioni con il tuo dettagli):

 <connectionStrings> 
     <add name="TITLEContext" connectionString="metadata=res://*/Models.TITLE.csdl|res://*/Models.TITLE.ssdl|res://*/Models.TITLE.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=DATASOURCE;Initial Catalog=DATABASE;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

E poi ho seguito con questo nel pubblico TI TLEContext()

DbDatabase.SetInitializer(new DropCreateDatabaseIfModelChanges<TITLEContext>()); 

sono voluti un paio tentativi, ma mettere un punto di interruzione su uno dei vostri carichi e controllare le entità del contesto. Dovrebbe avere un'opzione per vedere la stringa di connessione al database ...

buona fortuna!