2012-08-30 23 views
16

Estoy desarrollando una aplicación ASP.NET MVC 4 utilizando VS 2010 y EF 4.3. Recupera algunos datos de una base de datos externa y todo funcionó como se esperaba hasta que intenté recompilarlo un día. Después de la compilación recibo el siguiente error EF:Entity Framework 4.3. Nombre de columna inválido 'CreatedOn'

Invalid column name 'CreatedOn'.

Sin DB o se realizaron cambios de código - Yo simplemente he añadido algunas hendiduras para facilitar la lectura. Las versiones de aplicaciones anteriores de TFS también arrojan la misma excepción.

No tengo CreatedOn propiedad en mis entidades y no hay tal campo en la base de datos y no lo necesito y no lo quiero en cualquier caso.

¿Qué se debe hacer para evitar esta excepción?

Esta es mi costumbre contexto DB que utilizo para acceder a los datos:

public class MyContext<T> : DbContext where T : class, IDataEntity 
{ 
    public MyContext(string connectionKey) 
     : base("name=" + connectionKey) 
    { 
     Configuration.AutoDetectChangesEnabled = false;    
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Label>().Property(item => item.Id).HasColumnName("LabelId"); 
     modelBuilder.Entity<Label>().Ignore(item => item.ChangedBy); 
    } 
} 

y esta es la clase Label

public class BaseEntity : IDataEntity 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string ChangedBy { get; set; } 
} 

public class Label : BaseEntity 
{ 
} 
+0

¿Se puede publicar la clase 'Etiqueta'? – Eranga

+0

Esta es la clase Label: clase pública BaseEntity: IDataEntity { public int Id {get; conjunto; } cadena pública Nombre {get; conjunto; } cadena pública ChangedBy {get; conjunto; }} clase pública Label: BaseEntity {} – msaruyev

+0

Este problema también se discute aquí: http://stackoverflow.com/questions/19646659/createdon-column-in-entity-framework-6 – AXMIM

Respuesta

6

Encontré una respuesta para mi pregunta. Gracias a todos por las respuestas.

Database.SetInitializer<MyContext<Label>>(null); 

Esto soluciona el problema y deshabilita el seguimiento de cambios de DB en EF.

+0

Gracias esto fue útil, sin embargo, estoy adoptando esto solo como una solución temporal para la depuración, ya que no estoy seguro de querer deshabilitar el seguimiento de cambios de base de datos para siempre ... (ver mi confusión) –

10

EF 4.3.1 añade una columna a la tabla CreatedOn__MigrationHistory, que EF 5.0 posteriormente eliminado. Sospecho que actualizaste EF a 4.3.1 desde la última vez que actualizaste la base de datos.

Puede ejecutar una migración para agregar la columna CreatedOn, agregarla manualmente o actualizar a EF 5.0 donde ya no es necesario.

+0

DB no fue cambiado de cualquier manera. No tengo la tabla "_migrationHistory" en DB y no tengo permisos para cambiar algo en este DB. Estoy trabajando con .NET Framework 4.0 y cuando intento actualizar a EF 5 con NuGet recibo excepciones relacionadas con el esquema: El esquema especificado no es válido. Errores: (0,0): advertencia 0005: No se pudo encontrar información de esquema para el atributo 'Namespace'. (0,0): advertencia 0005: No se pudo encontrar información de esquema para el atributo 'Proveedor'. (0,0): advertencia 0005: No se pudo encontrar la información del esquema para el atributo 'ProviderManifestToken' ... – msaruyev

+1

Encontrará la tabla __MigrationHistory en 'Tablas del sistema'. Me temo que no tengo idea de cuáles son los errores al actualizar a EF 5.0, pero técnicamente debería funcionar en .NET 4.0 –

+1

Esto no tiene sentido porque me sale este error y nunca toqué EF5 o EF4. Solo estoy usando EF6: X. –

1

Actualmente hay una columna CreatedOn en la tabla __MigrationHistory por lo que el problema podría ser algo relacionado con las migraciones de EF. Si no hay cambios de código, migraciones pendientes o cualquier otra cosa, el error es realmente un caso muy extraño.

PS. Encontré esto, podría ser útil: http://bstechnical.blogspot.fi/2012/08/invalid-column-name-createdon-code-first.html

+0

Como puede ver en mi contexto de base de datos personalizado, ya configuré Configuration.AutoDetectChangesEnabled = false, pero esto no ayuda. ¿Hay alguna otra manera de deshabilitar la detección de cambios de DB en EF? – msaruyev

13

En mi caso, era el MiniProfiler. Utilizo EF 5.0, usa EF 4.x. Después de deshabilitar el generador de perfiles, ya no se lanzó la excepción

Cuestiones relacionadas