none
Se puede modificar la estructura de la base de datos automáticamente con EF RRS feed

  • Pregunta

  • Digamos que tengo un origen de datos en SQL Server con dos tablas, Cabeceras y Líneas, me genero las entidades automáticamente con Entity Framework. Imaginaos que yo distribuyo una aplicación que se basa en este modelo y que en cada cliente tiene un origen de datos diferente.

    Si yo cambio la estructura del origen, por ejemplo añado un campo a la tabla Cabeceras, le doy a actualizar modelo y este me actualiza la entidad automáticamente. Mi problema es que cuando actualizo en un cliente: ¿Hay alguna forma de que teniendo la entidad modificada me actualice la estructura del origen de datos?, es decir, que teniendo la clase con el campo añadido en la tabla Cabecera me lo añada automáticamente en la base de datos donde está apuntando la entidad.

    No se si me explico.

    lunes, 7 de mayo de 2012 14:01

Respuestas

  • No de forma automática desde entity Framework. Tal como lo describes, no estás usando "code-first", sino que partes de la base de datos y generas el modelo de entidades. El propio Entity Framework no tiene nada para propagar esos cambios en el esquema a las bases de datos de producción.

    Pero sí lo podrías hacer con un proyecto de "Data-Tier Application" en Visual Studio. Si el esquema de la base de datos lo generas como "data-tier", el propio visual studio te genera un "instalable" que puedes importar desde SQL Server en los servidores de destino, y es capaz de actualizar las bases de datos existentes aplicando los cambios que hayas hecho en tu proyecto. Pero aquí no tiene nada que ver Entity Framework, estos cambios los hace la aplicación data-tier.

    • Marcado como respuesta DiegoDGS jueves, 10 de mayo de 2012 7:19
    martes, 8 de mayo de 2012 15:42
  • Hola :)

    Como comenta Alberto no es automatico... otra opcion es poder generar los Scripts necesarios para actualizar la estructura de la tabla desde el modelo:

    http://nicolocodev.wordpress.com/2012/02/18/entity-framework-model-first/

    No se si aplique para tu caso :(

    Quedo atento a tus comentarios.

    Saludos.


    Nicolás Herrera
    Bogotá - Colombia
    BLOG - Leader Group BogotaDotNet
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes

    • Marcado como respuesta DiegoDGS jueves, 10 de mayo de 2012 7:20
    miércoles, 9 de mayo de 2012 21:54
  • Hola Diego,

    otra opción y no se si te valdrá que uses los DbMigrations que vienen con Entity Framework. Para esto tendrías que cambiar un poco la forma de trabajar y no se si te valdrá para tu proyecto. 

    Entity Framework Code First DbMigration (I)

    Entity Framework Code First DbMigration (II)


    Atentamente, Sergio.

    Blog
    Twitter

    • Marcado como respuesta DiegoDGS jueves, 10 de mayo de 2012 7:20
    jueves, 10 de mayo de 2012 7:07

Todas las respuestas

  • No de forma automática desde entity Framework. Tal como lo describes, no estás usando "code-first", sino que partes de la base de datos y generas el modelo de entidades. El propio Entity Framework no tiene nada para propagar esos cambios en el esquema a las bases de datos de producción.

    Pero sí lo podrías hacer con un proyecto de "Data-Tier Application" en Visual Studio. Si el esquema de la base de datos lo generas como "data-tier", el propio visual studio te genera un "instalable" que puedes importar desde SQL Server en los servidores de destino, y es capaz de actualizar las bases de datos existentes aplicando los cambios que hayas hecho en tu proyecto. Pero aquí no tiene nada que ver Entity Framework, estos cambios los hace la aplicación data-tier.

    • Marcado como respuesta DiegoDGS jueves, 10 de mayo de 2012 7:19
    martes, 8 de mayo de 2012 15:42
  • Hola :)

    Como comenta Alberto no es automatico... otra opcion es poder generar los Scripts necesarios para actualizar la estructura de la tabla desde el modelo:

    http://nicolocodev.wordpress.com/2012/02/18/entity-framework-model-first/

    No se si aplique para tu caso :(

    Quedo atento a tus comentarios.

    Saludos.


    Nicolás Herrera
    Bogotá - Colombia
    BLOG - Leader Group BogotaDotNet
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes

    • Marcado como respuesta DiegoDGS jueves, 10 de mayo de 2012 7:20
    miércoles, 9 de mayo de 2012 21:54
  • Hola Diego,

    otra opción y no se si te valdrá que uses los DbMigrations que vienen con Entity Framework. Para esto tendrías que cambiar un poco la forma de trabajar y no se si te valdrá para tu proyecto. 

    Entity Framework Code First DbMigration (I)

    Entity Framework Code First DbMigration (II)


    Atentamente, Sergio.

    Blog
    Twitter

    • Marcado como respuesta DiegoDGS jueves, 10 de mayo de 2012 7:20
    jueves, 10 de mayo de 2012 7:07
  • Hola a todos, muchas gracias por las respuestas, que son todas soluciones válidas.

    Ya había visto algo de documentación sobre DbMigration, pero los dos artículos que me envías es exactamente lo que queremos. 

    jueves, 10 de mayo de 2012 7:12
  • Muchas gracias por la respuesta. Ya había barajado esa opción, de hecho la utilizo en un proyecto específico en el que los cambios de la base de datos se hacen en el cliente cada vez que se actualiza versión. Pero este caso no me vale para casos en los que un cliente puede actualizarse a una versión que no tiene orden cronológico, es decir, por ejemplo, el cliente tiene la versión 1 y en vez de actualizarse a la versión 2 se actualiza a la versión 5, todos esos cambios, los de la 2, 3 y 4, no se realizarían.

    Si me equivoco coméntame si sabes como abordar el problema, porque la verdad que usando esta tecnología es la mas optima y facil para la replicación de esquemas. 


    • Editado DiegoDGS jueves, 10 de mayo de 2012 7:24
    jueves, 10 de mayo de 2012 7:19
  • Es una solución, pero no es exactamente lo que quiero. Muchas gracias.
    jueves, 10 de mayo de 2012 7:21