5

He estado usando EF desde hace un tiempo, siempre en el enfoque Model-First. Ahora estoy aventuras a través de Code-First tierras. El problema es que he tenido problemas con la creación automática de tablas.EntityFramework no crea tablas

De acuerdo con algunos sitios es posible. Y he intentado su enfoque sin éxito.

He aquí una de las cosas que he intentado: Database.CreateIfNotExists()

No hubo suerte ...

Mi cadena de conexión es perfecta y el trabajo. Si agrego la tabla manualmente, funciona. El problema es cuando no tengo la tabla creada. Simplemente no crea como me dijeron que lo haría.

Mis clases están decoradas correctamente. (De nuevo: está funcionando cuando tengo los DB creados)

¿Alguna sugerencia? ¿Esta característica realmente funciona?

que estoy usando:

Visual Studio 2010 Professional

ADO.NET Entity Framework 4.3.1 (aunque he intentado con 4.1 también)

SQL Server 2008 R2

Gracias por adelantado.

+0

¿Creó su propia clase de contexto derivada de DbContext? y luego hacer una llamada que usaría DbSet Entidades dentro del contexto – Sergey

+2

Database.CreateIfNotExists() solo causará que EF cree la tabla si la base de datos en sí misma no existe (en cuyo caso crea la base de datos y la tabla). No causará que cree automáticamente la tabla si existe una base de datos, pero la tabla falta. ¿Es esto tal vez con lo que te estás metiendo? –

+0

@Sergey Sí, lo hice. – eestein

Respuesta

5

Hay tres inicializadores de base de datos que se incluyen con el marco de entidad, todos implementan la interfaz IDatabaseInitializer<Context>. Ellos son:

  • CreateDatabaseIfNotExist (por defecto)
  • DropCreateDatabaseWhenModelChanges
  • DropCreateDatabaseAlways

Como se ve el API por defecto no tiene el inicializador que sólo crea tablas, sino que lo hace a toda la base de datos. Sin embargo, hay otros inicializadores que las personas han creado, hay uno que hace exactamente lo mismo que usted desea.

Está en el paquete Nuget EFCodeFirst.CreateTablesOnly

Otra opción es crear su propia inicializador si eso es algo que realmente necesita.

+0

Gracias por su respuesta. Más tarde esta noche lo intentaré y te dejaré saber cómo fue aceptando la respuesta. ¡Gracias de nuevo! – eestein

+0

De nada :) – Sergey

+0

Eso funcionó, gracias hombre. – eestein

Cuestiones relacionadas