2012-08-30 20 views
16

Sto sviluppando un'applicazione ASP.NET MVC 4 utilizzando VS 2010 e EF 4.3. Recupera alcuni dati da un database esterno e tutto ha funzionato come previsto fino a quando non ho provato a ricompilarlo un giorno. Dopo la compilazione ricevo il seguente errore EF:Entity Framework 4.3. Nome colonna non valido 'CreatedOn'

Invalid column name 'CreatedOn'.

No DB o sono state apportate modifiche al codice - ho semplicemente aggiunto alcune rientranze per la leggibilità. Anche le precedenti versioni dell'applicazione di TFS generano la stessa eccezione.

Non ho la proprietà CreatedOn nelle mie entità e nessun campo del genere nel database e non ne ho bisogno e non lo voglio in ogni caso.

Cosa si deve fare per evitare questa eccezione?

Questo è il mio contesto personalizzato DB uso per l'accesso ai dati:

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); 
    } 
} 

e questa è la classe 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

Puoi pubblicare la classe 'Label'? – Eranga

+0

Questa è la classe Label: public class BaseEntity: IDataEntity { public int Id {get; impostato; } stringa pubblica Nome {get; impostato; } public string ChangedBy {get; impostato; }} public class Etichetta: BaseEntity {} – msaruyev

+0

Questo problema è stato discusso anche qui: http://stackoverflow.com/questions/19646659/createdon-column-in-entity-framework-6 – AXMIM

risposta

6

Trovato una risposta per la mia domanda. Grazie a tutti per le risposte.

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

Questo risolve il problema e disabilita il rilevamento delle modifiche DB in EF.

+0

Grazie, questo è stato utile, tuttavia sto adottando questo come una soluzione temporanea per il debug perché non sono sicuro di voler disabilitare il rilevamento delle modifiche del DB per sempre ... (vedi la mia confusione) –

10

EF 4.3.1 aggiunge una colonna CreatedOn alla tabella __MigrationHistory, che EF 5.0 successivamente rimosso. Ho il sospetto che tu abbia aggiornato EF alla 4.3.1 da quando hai aggiornato l'ultima volta il database.

È possibile eseguire una migrazione per aggiungere la colonna CreatedOn, aggiungerla manualmente o aggiornare a EF 5.0 dove non è più necessaria.

+0

DB non era cambiato in ogni modo. Non ho tabella "_migrationHistory" in DB e non ho le autorizzazioni per modificare qualcosa in questo DB. Sto lavorando con .net framework 4.0 e quando provo ad aggiornare a EF 5 con NuGet riceviamo eccezioni relative allo schema: Lo schema specificato non è valido. Errori: (0,0): avviso 0005: impossibile trovare le informazioni sullo schema per l'attributo "Namespace". (0,0): avviso 0005: impossibile trovare le informazioni sullo schema per l'attributo "Provider". (0,0): avviso 0005: Impossibile trovare le informazioni sullo schema per l'attributo 'ProviderManifestToken' ... – msaruyev

+1

La tabella __MigrationHistory si trova in 'Tabelle di sistema'. Temo di non avere idea di quali siano gli errori durante l'aggiornamento a EF 5.0, ma tecnicamente dovrebbe funzionare su .NET 4.0 –

+1

Questo non ha senso perché ottengo questo errore e non ho mai toccato EF5 o EF4. Sto solo usando EF6: X. –

1

In realtà c'è una colonna CreatedOn nella tabella __MigrationHistory, quindi il problema potrebbe riguardare le migrazioni EF. Se non ci sono codechanging, migrazioni in sospeso o altro, l'errore è davvero un caso molto strano.

PS. Ho trovato questo, potrebbe rivelarsi utile: http://bstechnical.blogspot.fi/2012/08/invalid-column-name-createdon-code-first.html

+0

Come puoi vedere dal mio contesto DB personalizzato, ho già inserito Configuration.AutoDetectChangesEnabled = false, ma questo non aiuta. C'è un altro modo per disabilitare il rilevamento delle modifiche db in EF? – msaruyev

13

Nel mio caso era il MiniProfiler. Io uso EF 5.0, usa EF 4.x. Dopo aver disabilitato il profiler, l'eccezione non è stata più lanciata

Problemi correlati