none
Alojamiento de una proyecto MVC 4 con EF Code First RRS feed

  • Pregunta

  • Hola a todos, he alojado mi página con MVC 4 y EF Code First, y cuando intento ejecutar la aplicación me produce errores relacionados con la Base de datos que inicialmente contenía tablas distintas de las del proyecto actual, pero en las siguientes condiciones:

       Al estar la base de datos en el ISP no me dejan crear la Base de datos de nuevo, ni tampoco acceso remoto para poder realizar migraciones mediante NUGET.

     Lo que necesito saber es si hay forma de inactivar en EF la comprobación del esquema de la Base de datos, lo que implica que mantenga el modelo y la Base de datos sincronizadas manualmente o si existe alguna forma de migración de los cambios que no impliquen ejecutar comandos sobre la Base de datos, sino que la actualización se haga solo desde el propio código del proyecto, por ejemplo desde el código de alguna clase del modelo o desde el código de algún controlador

    un saludo 

    viernes, 8 de noviembre de 2013 11:18

Respuestas

  • Gracias Leandro por tu interés, al final lo he solucionado y no te lo podrás creer, el problema era es Sistema Operativo de 64 bits (Windows 7), hice lo mismo en otro Windows 7 de 32 bits y funcionó perfectamente, localicé algún caso parecido que mencionaba dicho problema con los 64 bits y efectivamente eso era, lo comento por si alguien se encuentra con el mismo problema que sepa cual es la solución.

    un saludo a todos

    • Marcado como respuesta fjjcent martes, 12 de noviembre de 2013 22:25
    martes, 12 de noviembre de 2013 22:24

Todas las respuestas

  • hola

    si estas suando migrations podrias usar el comento

    Update-Database -script

    para obtener los queries que apliquen el diferencialpara actualizar la estructura en el hosting

    Entity Framework 5 Code First: Enabling Migrations in a Real Project

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 8 de noviembre de 2013 13:32
  • Si la actualización mediante un SCRIPT sería la solución para mi problema debido a que mi proveedor no me deja acceder en remoto a su base de datos SQL, pero si me facilita una herramienta que permite ejecutar scripts de SQL, pero mi problema es que no me funciona la opción -scripts de la consola de Nuget al ejecutar el comando Update-Dabase -scripts que es el comando que supuestamente genera los scripts.

    Los pasos que doy son los siguientes:

    -Creo una BD inicial y creo la estructura de tablas inicial con Code First y funciona

    - Añado un campo a una tabla en la clase POCO, y ya EF ve el cambio y al ejecutar dispara una excepción

    - Agrego desde la consola de Nuget una Migración que efectivamente detecta el cambio y lo sitúa en  el método UP para agregar el campo en la actualización.

    -Ejecuto desde la consola la actualización de BD con Scripts (Update-DataBase -scripts) y falla, pero si le quito el parámetro -scripts funciona y actualiza la tabla.

    Me podéis decir si falta algo en el comando de actualización.

    Un saludo

     

    lunes, 11 de noviembre de 2013 16:35
  • hola

    pero estas eejcutando el comando Enable-Migrations

    desde la consola de nuget para que habilite despues poder mantener y aplicar las diferencias que definas desde codigo

    sino lo haces el cambio que agregas en la clase de la entidad debes llevarlo a la db de forma manual

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 11 de noviembre de 2013 18:18
  • Si las migraciones están habilitadas, de hecho si no pongo el parámetro -Scripts la base de datos se actualiza el problema es que al poner Update-Database -Scripts aparece el siguiente error:

    PM> Update-Database -Script -TargetMigration:CampoActivo

    Applying explicit migrations: [201311111920265_CampoActivo].

    Applying explicit migration: 201311111920265_CampoActivo.

    System.FieldAccessException: Error cuando el método 'Microsoft.SqlServer.Management.UI.VSIntegration.Editors.EditorFactoryBase.Microsoft.VisualStudio.Shell.Interop.IVsEditorFactory.CreateEditorInstance(UInt32, System.String, System.String, Microsoft.VisualStudio.Shell.Interop.IVsHierarchy, UInt32, IntPtr, IntPtr ByRef, IntPtr ByRef, System.String ByRef, System.Guid ByRef, Int32 ByRef)' intentó obtener acceso al campo 'Microsoft.Internal.Performance.CodeMarkers.Instance'.

    Server stack trace:

       en Microsoft.SqlServer.Management.UI.VSIntegration.Editors.EditorFactoryBase.Microsoft.VisualStudio.Shell.Interop.IVsEditorFactory.CreateEditorInstance(UInt32 createFlags, String moniker, String physicalView, IVsHierarchy hierarchy, UInt32 itemId, IntPtr existingDocData, IntPtr& docViewIntPtr, IntPtr& docDataIntPtr, String& caption, Guid& cmdUIGuid, Int32& result)

       en EnvDTE.ItemOperations.OpenFile(String FileName, String ViewKind)

       en System.Data.Entity.Migrations.Utilities.DomainDispatcher.OpenFile(String fileName)

       en System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)

       en System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

    Exception rethrown at [0]:

       en System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)

       en System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)

       en System.Data.Entity.Migrations.Utilities.DomainDispatcher.OpenFile(String fileName)

       en System.Data.Entity.Migrations.Extensions.ProjectExtensions.NewSqlFile(Project project, String contents)

       en System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()

       en System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)


    Error cuando el método 'Microsoft.SqlServer.Management.UI.VSIntegration.Editors.EditorFactoryBase.Microsoft.VisualStudio.Shell.Interop.IVsEditorFactory.CreateEditorInstance(UInt32, System.String, System.String, Microsoft.VisualStudio.Shell.Interop.IVsHierarchy, UInt32, IntPtr, IntPtr ByRef, IntPtr ByRef, System.String ByRef, System.Guid ByRef, Int32 ByRef)' intentó obtener acceso al campo 'Microsoft.Internal.Performance.CodeMarkers.Instance'.


    lunes, 11 de noviembre de 2013 19:24
  • Gracias Leandro por tu interés, al final lo he solucionado y no te lo podrás creer, el problema era es Sistema Operativo de 64 bits (Windows 7), hice lo mismo en otro Windows 7 de 32 bits y funcionó perfectamente, localicé algún caso parecido que mencionaba dicho problema con los 64 bits y efectivamente eso era, lo comento por si alguien se encuentra con el mismo problema que sepa cual es la solución.

    un saludo a todos

    • Marcado como respuesta fjjcent martes, 12 de noviembre de 2013 22:25
    martes, 12 de noviembre de 2013 22:24