tutorial net mvc migrations framework first existing español code asp c# asp.net-mvc-5 ef-code-first entity-framework-6 ef-database-first

c# - net - entity framework tutorial español



¿Cómo sincronizar el modelo después de usar Code First de la base de datos utilizando Entity Framework 6.1 y MVC 5? (4)

Suposiciones

  • Utilizando EF 6.1, MVC 5, VS 2013, C #

  • Tengo un modelo de base de datos existente diseñado en Toad DM para SQL Server y es muy importante mantenerlo siempre actualizado

Pasos y notas

  1. Usando el modelo de datos de entidad ADO.NET, elegí Code First from Database ( nueva función en EF 6.1 ) para generar los modelos. Nota: Las clases de modelo y la clase DbContext se generaron exitosamente pero NO se generó el archivo .edmx o .tt .

  2. A continuación, agregué un nuevo elemento de andamio: Controladores MVC 5 con vistas, utilizando Entity Framework. Nota: Éxito, controladores y vistas generadas.

Pregunta

De ahora en adelante no quiero usar Code First para actualizar mi base de datos. En su lugar quiero que los modelos se actualicen en función de los cambios en la base de datos. ¿Qué hacer a continuación? Si no tengo un archivo edmx, ¿no podré actualizar mis clases modelo desde la base de datos?


El Código de asistente de modelo de datos de entidad primero de la base de datos hace un excelente trabajo al crear sus clases de entidad, como si se crearan en el estilo de Código primero. Lo que está preguntando es si hay alguna manera de mantener estas clases actualizadas a medida que su base de datos cambie, de manera similar al estilo de EDMX "Actualizar modelo de base de datos". Por lo que he investigado, esto no es posible mediante el uso de herramientas integradas. Sin embargo, aquí hay una solución que he encontrado útil:

Digamos que tengo una base de datos con una tabla de productos y una tabla de clientes. Originalmente creé una clase StoreDBContext y seleccioné el producto como uno de mis objetos. Ahora quiero agregar la tabla de clientes como una nueva entidad al contexto existente. Aquí se explica cómo hacer esto con el Asistente de Code First:

  1. Cree un nuevo modelo de datos de entidad, llámelo StoreDBContextTemp o lo que sea
  2. Elija el código primero de la opción asistente de base de datos
  3. Seleccione cliente como un objeto para agregar (solo cliente) y complete el asistente
  4. Abra el archivo de contexto recién creado, StoreDBContextTemp.cs , y copie las propiedades virtuales de sus entidades recién agregadas:

public virtual DbSet<Customer> Customers {get; set;}

  1. Pegue estas nuevas propiedades en su clase de dbcontext Original StoreDBContext.cs .
  2. Elimine StoreDBContextTemp.cs y elimine la cadena de conexión para StoreDBContextTemp en app.config / web.confg, etc.
  3. Ahora puede usar Cliente en la clase StoreDBContext

Si agrega o elimina tablas, deberá ajustar los campos manualmente, pero al menos no necesitará escribir docenas de propiedades cada vez que se agregue una nueva tabla al modelo.


Hay una cosa más que añadir a la respuesta de Brian Vander Plaats. En el paso 4, también querrá copiar todo lo que se encuentre en el nuevo método StoreDBContextTemp.cs / OnModelCreating y agregarlo al StoreDBContext.cs / OnModelCreating existente. De lo contrario, perdería esas adiciones de configuración cuando elimine la nueva clase de contexto.


Tres cosas.

  1. No hay .edmx cuando usas Code First.

  2. Si usa Code First Migrations, tendría que escribir primero el código y luego migrar los cambios a la base de datos. Esto le ayuda a tener su código mucho más organizado sin código generado, lo cual es una ventaja.

  3. Hay un plugin en Visual Studio para hacer lo contrario. Entity Framework PowerTools le permite seleccionar la base de datos y asignarla a objetos.

https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d


Una opción más es simplemente eliminar las clases generadas automáticamente del proyecto y, una vez más, generarlas. Si bien solo seguimos este enfoque, debemos asegurarnos de que debemos dar el mismo nombre para el modelo de datos (nombre de clase que se hereda de DbContext) que el anterior. El nombre del modelo de datos se resalta a continuación.