2010-12-19 21 views
6

Con CTP4, yo solía ser capaz de hacer lo siguiente (como suggested by ptrandem):¿Dónde se encuentra modelBuilder.IncludeMetadataInDatabase en EF CTP5?

modelBuilder.IncludeMetadataInDatabase = false 

Con esta línea de código, EF no crea la tabla EdmMetadata en mi base de datos, y no hace un seguimiento de modelo cambios.

he podido encontrar una manera de lograr esto en el nuevo CTP5, por lo que ahora cada vez que cambie de modelo, me sale esto:

El modelo de copias de la 'MyContext' contexto ha cambiado desde Se creó la base de datos . O manualmente eliminar/actualizar la base de datos o llamar al Database.SetInitializer con una instancia de IDatabaseInitializer . Para el ejemplo , la estrategia DropCreateDatabaseIfModelChanges se eliminará automáticamente y recreará la base de datos y, opcionalmente, la inicializará con los datos nuevos.

Entonces, ¿todos saben dónde está la propiedad IncludeMetadataInDatabase en CTP5? Gracias.

Respuesta

11

CTP5 incluye una muy fresco función llamada convenciones conectables que se puede usar para agregar/quitar convenciones. IncludeMetadataInDatabase se ha quitado y ser sustituido por una convención enchufable
que hace lo mismo para usted:

modelBuilder.Conventions 
      .Remove<System.Data.Entity.Database.IncludeMetadataConvention>(); 
+0

Gracias, Morteza. ¿Sabes si hay otras diferencias entre hacer esto y solo descartar la tabla EdmMetadata como dice el blog del equipo ADO.NET? ¿Qué es preferible? –

+2

No hay problema. Creo que el que encontraste en el blog del equipo habla de las bases de datos existentes y el que sugerí es para cuando generas un DB de tu modelo de objetos.Al final del día, ambos tienen el mismo resultado: usted tiene un modelo de objetos POCO que funciona con una base de datos sin una tabla Metadata, así que creo que depende de su escenario (una base de datos nueva o una existente). –

+0

Excelente. ¡Muchas gracias! –

1

He estado buscando esto por todas partes, y tuve que encontrar la respuesta justo después de publicar mi pregunta, DUH. Desde el ADO.NET team blog:

En CTP5 hemos eliminado la necesidad de realizar una configuración adicional cuando asignación a una base de datos existente. Si Code First detecta que apunta a un esquema de base de datos existente que no creó, entonces 'confiará en usted' e intentará usar el código primero con el esquema. La forma más fácil de Código Primer punto a una base de datos existente es añadir una cadena de conexión Aplicación/Web.config con el mismo nombre como su DbContext derivados (...)

3

El equivalente en CTP5 para apagar la lógica de inicialización: En su Application_Start en Global.asax, entre lo siguiente:

System.Data.Entity.Database.DbDatabase.SetInitializer<MyDBContext>(null); 
3

En EF 4,1

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
} 
Cuestiones relacionadas