2011-10-24 12 views
16

Ho un problema con EF 4.1 non chiamando OnModelCreating in modo che possa configurare tabelle ecc. Ho un database esistente. Qui è la mia stringa di connessione:EF 4.1 OnModelCreating non chiamato

<add name="AcmeDBContext" 
    connectionString="metadata=res://*/|res://*/|res://*/; 
         provider=System.Data.SqlClient; 
         provider connection string=&quot; 
         data source=[server]; 
         initial catalog=Acme;integrated security=True; 
         multipleactiveresultsets=True;App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 

ecco la mia classe ereditata da DbContext:

public class AcmeDBContext : DbContext 
{ 
    public AcmeDBContext() 
    : base() 
    { 
    Database.SetInitializer<AcmeDBContext>(null);   
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();  
    modelBuilder.Entity<Vehicle>().ToTable("tblVehicle"); 
    modelBuilder.Entity<VehicleMake>().ToTable("tblVehicleMake"); 
    modelBuilder.Entity<VehicleModel>().ToTable("tblVehicleModel"); 
    base.OnModelCreating(modelBuilder); 
    } 

} 

Ho letto e leggere online, ma non riesco a sottolineare quale sia il problema. Lo OnModelCreating non viene mai chiamato e quindi le eccezioni dicono che l'entità/le classi (Vehicle, VehicleMake, VehicleModel) non esistono nel contesto corrente quando provo a interrogare qualcosa.

+0

Come stai creando un'istanza del contesto nel codice? – Yuck

risposta

22

Si stanno utilizzando due approcci insieme: la stringa di connessione indica che si desidera utilizzare prima il modello o il database con EDMX, ma si sta scrivendo il contesto per utilizzare il codice prima/fluente api per mappare il database. Una volta che si utilizza EDMX OnModelCreating non viene mai chiamato. Utilizzare la stringa di connessione SQL comune senza risorse di metadati se si desidera utilizzare OnModelCreating.

<add name="AcmeDBContext" 
    connectionString="data source=[server]; 
         initial catalog=Acme;integrated security=True; 
         multipleactiveresultsets=True;App=EntityFramework" 
    providerName="System.Data.SqlClient" /> 
+0

Quindi, se voglio utilizzare prima DataBase (non credo di avere una scelta), allora dove mappare i nomi delle classi ai nomi delle tabelle? Devo usare nomi di classe uguali ai nomi di tabelle ?? Mi dispiace di aver usato NH prima, ma non EF, e ho potuto facilmente mappare le classi ai tavoli con FluentNH – ASR

+0

Ho rimosso le informazioni sui metadati e ancora nessun cambiamento nel comportamento !! OnModelCreating continua a non essere chiamato. – ASR

+0

Se si desidera utilizzare Database First, si crea un file EDMX. Hai la possibilità di creare questo da un database esistente. Dopo la prima importazione avrai un modello di entità di base che potrai modificare completamente secondo le tue esigenze. Il framework entità esegue quindi la mappatura dal modello entità allo schema del database. Vedi http://msdn.microsoft.com/en-us/data/ff191186 –

Problemi correlati