2011-10-24 20 views
16

Tengo un problema con EF 4.1 que no llama a OnModelCreating para que pueda configurar tablas, etc. Tengo una base de datos existente. Aquí está mi cadena de conexión:EF 4.1 OnModelCreating no se llama

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

Aquí está mi clase heredada de 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); 
    } 

} 

He leído y leer en línea, pero no puede señalar cuál es el problema. Nunca se llama al OnModelCreating y de ahí las excepciones que dicen que las entidades/clases (Vehicle, VehicleMake, VehicleModel) no existen en el contexto actual cuando trato de consultar algo.

+0

¿Cómo está creando una instancia del contexto en su código? – Yuck

Respuesta

22

Está utilizando dos enfoques juntos: su cadena de conexión dice que primero quiere usar modelo o base de datos con EDMX, pero está escribiendo contexto para usar el código primero/la API fluida para mapear la base de datos. Una vez que utiliza EDMX, OnModelCreating nunca se llama. Utilice una cadena de conexión SQL común sin recursos de metadatos si desea usar OnModelCreating.

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

Entonces, si quiero usar DataBase First (¿no crees que tengo otra opción?), ¿Dónde puedo asignar los nombres de las clases a los nombres de las tablas? ¿Tengo que usar classnames igual que los nombres de tabla? Lamento haber usado NH antes, pero no EF, y pude asignar fácilmente clases a tablas con FluentNH – ASR

+0

¡Eliminé la información de metadatos y aún no hubo cambios en el comportamiento! OnModelCreating aún no se llama. – ASR

+0

Si desea utilizar Database First, cree un archivo EDMX. Usted tiene la opción de crear esto desde una base de datos existente. Después de la primera importación, tendrá un modelo de entidad básica que puede modificar completamente según sus necesidades. El marco de la entidad luego realiza la asignación desde su modelo de entidad al esquema de la base de datos. Consulte http://msdn.microsoft.com/en-us/data/ff191186 –

Cuestiones relacionadas