asp.net mvc - una - Modelo de respaldo de un contexto de base de datos ha cambiado; Considere las primeras migraciones de código
entity framework code first tutorial español (9)
EF codefirst mirará su DbContext, y descubrirá todas las colecciones de entidades declaradas en él (y también mirará las entidades relacionadas con esas entidades a través de las propiedades de navegación). Luego verá la base de datos a la que le asignó una cadena de conexión y se asegurará de que todas las tablas coincidan con la estructura de sus entidades en el modelo. Si no coinciden, no puede leer / escribir en esas tablas. Cada vez que crea una nueva base de datos, o si cambia algo acerca de las declaraciones de clase de entidad, como agregar propiedades o cambiar los tipos de datos, entonces detectará que el modelo y la base de datos no están sincronizados. Por defecto, simplemente le dará el error anterior. Por lo general, durante el desarrollo, lo que desea es que la base de datos se vuelva a crear (borrando cualquier dato) y se genere nuevamente a partir de la estructura de su nuevo modelo.
Para hacerlo, consulte "Función RecreateDatabaseIfModelChanges" en este artículo: http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx
Básicamente necesita proporcionar un inicializador de base de datos que herede de DropCreateDatabaseIfModelChanges (RecreateDatabaseIfModelChanges ahora está en desuso). Para hacer esto, simplemente agregue esta línea al método Application_Start
de su archivo Global.asax
.
Database.SetInitializer<NameOfDbContext>(new DropCreateDatabaseIfModelChanges<NameOfDbContext>());
Una vez que vaya a la producción y ya no quiera perder datos, eliminará este inicializador y en su lugar usará Migraciones de base de datos para que pueda implementar cambios sin perder datos.
El modelo que respalda el contexto ''MyDbContext'' ha cambiado desde que se creó la base de datos. Considere usar Code First Migrations para actualizar la base de datos ( http://go.microsoft.com/fwlink/?LinkId=238269 ).
¿Qué causa que esto ocurra? Literalmente he creado una nueva base de datos y no he cambiado nada, pero cada vez que intento acceder a un modelo desde un controlador, arroja esto.
Editar
Tiene algo que ver con el hecho de que estaba intentando compartir una cadena de conexión (es decir, una base de datos) con dos entidades separadas.
En caso de que haya realizado cambios en su contexto y desee realizar cambios relevantes en DB (o dejarlo tal como está), hay una manera rápida y sucia.
Vaya a DB y elimine todo de la tabla "_MigrationHistory"
En mi caso, este error fue causado por la existencia de la tabla _MigrationsHistory en la base de datos. Eliminar esa tabla solucionó el problema. No estoy seguro de cómo esa tabla entró en nuestra base de datos de entorno de prueba.
Entity Framework detecta que algo sobre el modelo ha cambiado, necesita hacer algo en la base de datos para que funcione. Solución: 1 . enable-migrations 2 . actualizar base de datos
Esto sucede cuando la estructura de la tabla y la clase de modelo ya no están sincronizadas . Necesita actualizar la estructura de la tabla de acuerdo con la clase de modelo o viceversa: aquí es cuando sus datos son importantes y no deben borrarse. Si su estructura de datos ha cambiado y los datos no son importantes para usted, puede usar la característica DropCreateDatabaseIfModelChanges
(anteriormente conocida como función '' RecreateDatabaseIfModelChanges
'') agregando el siguiente código en su Global.asax.cs :
Database.SetInitializer<MyDbContext>(new DropCreateDatabaseIfModelChanges<MyDbContext>());
Ejecuta tu aplicación nuevamente.
Como su nombre lo indica, esto soltará su base de datos y la recreará de acuerdo con su última clase de modelo (o clases), siempre que crea que las definiciones de estructura de tabla en sus clases de modelo son las más recientes y las últimas; de lo contrario, cambie las definiciones de propiedad de sus clases modelo.
Necesitas creerme Obtuve este error por la simple razón de que olvidé agregar la cadena de conexión en la aplicación .Config (el mío es un proyecto wpf) de su proyecto de inicio.
Toda la configuración en mi caso
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="ZzaDbContext" connectionString="Data Source=(localdb)/MSSQLLocalDB;Initial Catalog=ZaaDbInDepth;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient"/>
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
Para resolver este error, escriba el siguiente código en el método Application_Start () en el archivo Global.asax.cs
Database.SetInitializer<MyDbContext>(null);
Si ha cambiado el modelo y la base de datos con tablas que ya existen, y recibe el error "El respaldo del modelo ha cambiado un contexto de base de datos; Considere las primeras migraciones de código":
- Elimina los archivos en la carpeta "Migración" en tu proyecto
- Abra la consola de Package Manager y ejecute
pm>update-database -Verbose
El método más fácil y seguro Si sabe que realmente desea cambiar / actualizar su estructura de datos para que la base de datos se pueda sincronizar con su DBContext, la forma más segura es:
- Abra su consola de Package Manager
- Escriba: update-database -verbose -force
Esto le dice a EF que haga cambios en su base de datos para que coincida con su estructura de datos DBContext