seleccionado referencia recursos recuperar reciente que pueden puede proyecto proveedor modelo metadatos mas los hace generador framework especificados error encuentra encontrar ejecutar desde datos creĆ³ correspondiente contexto compatible codigo cargar cambiado archivo c# .net entity-framework entity-framework-5

c# - recursos - su proyecto hace referencia a la version mas reciente de entity framework



EF5 Obteniendo este mensaje de error: La compatibilidad del modelo no se puede verificar porque la base de datos no contiene los metadatos del modelo (8)

Encontré el código funcionando cambiando

static LaundryShopContext() { Database.SetInitializer<LaundryShopContext>( new DropCreateDatabaseIfModelChanges<LaundryShopContext>()); }

dentro

static LaundryShopContext() { Database.SetInitializer<LaundryShopContext>( new DropCreateDatabaseAlways<LaundryShopContext>()); }

Tengo este mensaje de error que sigue apareciendo cada vez que ejecuto la aplicación. Estoy usando Entity Framework 5: Code First

Aquí está el mensaje de error,

System.NotSupportedException: Model compatibility cannot be checked because the database does not contain model metadata. Model compatibility can only be checked for databases created using Code First or Code First Migrations. at System.Data.Entity.Internal.ModelCompatibilityChecker.CompatibleWithModel(InternalContext internalContext, ModelHashCalculator modelHashCalculator, Boolean throwIfNoMetadata) at System.Data.Entity.Internal.InternalContext.CompatibleWithModel(Boolean throwIfNoMetadata) at System.Data.Entity.Database.CompatibleWithModel(Boolean throwIfNoMetadata) at System.Data.Entity.DropCreateDatabaseIfModelChanges`1.InitializeDatabase(TContext context) at System.Data.Entity.Database.<>c__DisplayClass2`1.<SetInitializerInternal>b__0(DbContext c) at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass8.<PerformDatabaseInitialization>b__6() at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() at System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c) at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() at System.Data.Entity.Internal.InternalContext.Initialize() at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity) at System.Data.Entity.DbSet`1.Add(TEntity entity) at LaundryService_DEMO.frmMain.btnCreate_Click(Object sender, EventArgs e) in d:/MyDocs/Visual Studio 2012/Projects/LaundryService_DEMO/LaundryService_DEMO/frmMain.cs:line 39

Este error comenzó cuando creé una entidad llamada factura. Aquí está el código completo de la entidad,

public class Invoice { public string InvoiceID { get; set; } public string CustomerID { get; set; } public string UserID { get; set; } public decimal TotalAmount { get; set; } public DateTime TransactionDate { get; set; } public DateTime PaymentDate { get; set; } public Customer CustomerField { get; set; } public SystemUser SystemUserField { get; set; } } public class InvoiceMap : EntityTypeConfiguration<Invoice> { public InvoiceMap() { // Primary Key this.HasKey(x => x.InvoiceID); // Property(ies) and Mapping(s) this.ToTable("Invoice"); this.Property(x => x.InvoiceID) .IsRequired() .HasMaxLength(15) .HasColumnName("InvoiceID") .HasColumnType("nVarchar"); this.Property(x => x.CustomerID) .IsRequired() .HasMaxLength(15) .HasColumnName("CustomerID") .HasColumnType("nVarchar"); this.Property(x => x.UserID) .IsRequired() .HasMaxLength(15) .HasColumnName("UserID") .HasColumnType("nVarchar"); this.Property(x => x.TotalAmount) .IsRequired() .HasColumnName("TotalAmount") .HasColumnType("decimal"); this.Property(x => x.TransactionDate) .IsRequired() .HasColumnName("TransactionDate") .HasColumnType("datetime"); this.Property(x => x.PaymentDate) .IsOptional() .HasColumnName("PaymentDate") .HasColumnType("datetime"); // Relationship this.HasRequired(x => x.CustomerField) .WithMany(x => x.InvoiceCollection) .HasForeignKey(y => y.CustomerID); this.HasRequired(x => x.SystemUserField) .WithMany(x => x.InvoiceCollection) .HasForeignKey(y => y.UserID); } }

Para replicar la aplicación, he incluido el archivo de proyecto que está disponible para descargar . Y entonces esta pregunta no estará llena de código.

Si hay detalles que me he perdido en la pregunta, por favor coméntelos para poder incluirlos.


Esto probablemente esté relacionado con su base de datos que no contiene la tabla _MigrationHistory (que se puede ver utilizando SQL Server Management Studio en Tablas> Tablas del sistema).

No estoy seguro de cómo está administrando la base de datos, pero si todavía está en desarrollo y usando EF Migrations, una solución rápida es eliminar la base de datos y ejecutar Update-Database que recreará toda la base de datos y agregará la tabla _MigrationHistory.

Si desea evitar que EF ejecute este control, puede agregarlo a su clase DbContext

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


Esto también puede suceder si intenta inicializar el contexto contra una base de datos previamente existente con el mismo nombre, pero que se creó con otra base de código. Esta es la razón por la que el cambio de DropCreateDatabaseIfModelChanges a DropCreateDatabaseAlways funciona, la última configuración hace que la base de datos se vuelva a crear sin importar qué, evitando cualquier tipo de control de versiones de base de datos que pueda estar causando este problema.


Intenté debajo de 3 pasos. Funciona para mí .. Ejecute los siguientes comandos en la consola del administrador de paquetes 1. enable-migrations 2. update-database -verbose 3. add-migration initialmigrations -ignorechanges

NOTA: Mi escenario es que ya he creado las tablas db / (usando el primer acercamiento de código (usando una biblioteca de contexto DB compartida). Estoy tratando de usar la biblioteca en otra aplicación y otra base de datos. He sincronizado manualmente el primer db en segundo ... eso es ¿Por qué encontré este problema?


Obtuve este error cuando agrego
ContextKey = "MyProject.Repository.Common.DbContextA";

a Configuration.cs. Después de eliminar esa línea, funciona.


Sé que llego tarde a la fiesta, pero me encontré con el mismo error y mi base de datos ya tenía una tabla de historial de migración.

El error también podría indicar una clave de contexto incorrecta en la tabla de historial. Esto puede suceder si mueve la clase de contexto de la base de datos a otro espacio de nombres, como hice al refactorizar.

Actualizar el valor ContextKey en la tabla MigrationHistory al nuevo espacio de nombre del contexto de la base de datos me solucionó el problema .

Esta solución no requiere que descarte los contenidos de la base de datos, por lo que puede preferirse a la solución DropCreateDatabaseAlways .


Si, como yo, esto se debe a que se comienza con Code First y se cambia a Database First development mid-project ... todo esto es causado por una línea simple. Si necesita mantener su base de datos y su comentario de datos en la siguiente línea:

Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());

de esta sección de tu Modelo.

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) { } static ApplicationDbContext() { // Set the database intializer which is run once during application start // This seeds the database with admin user credentials and admin role // Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer()); } public static ApplicationDbContext Create() { return new ApplicationDbContext(); } }

Esto sucederá a menudo cuando comiences con los modelos de identidad integrados. Una vez que los ponga en funcionamiento, puede eliminar esa línea para mantenerla intacta pero conservar la funcionalidad. Sin embargo, si su modelo cambia, su base de datos tendrá que configurarse para coincidir con ... ¡algo que esté haciendo en el desarrollo de Database First de todos modos!


CreateDatabaseIfNotExists<ApplicationDbContext>();