2012-08-30 18 views
16

Ich entwickle eine ASP.NET MVC 4-Anwendung mit VS 2010 und EF 4.3. Es ruft einige Daten von einer externen Datenbank ab und alles hat wie erwartet funktioniert, bis ich eines Tages versuchte, es neu zu kompilieren. Nach der Zusammenstellung erhalte ich folgende EF Fehler:Entity Framework 4.3. Ungültiger Spaltenname 'CreatedOn'

Invalid column name 'CreatedOn'.

Keine DB oder Code-Änderungen vorgenommen wurden - ich habe einfach ein paar Einbuchtungen für Lesbarkeit hinzugefügt. Die vorherigen Anwendungsversionen von TFS werfen auch die gleiche Ausnahme.

Ich habe keine CreatedOn Eigenschaft in meinen Entitäten und kein solches Feld in der Datenbank und ich brauche es nicht und will es in keinem Fall.

Was sollte getan werden, um diese Ausnahme zu vermeiden?

Dies ist meine benutzerdefinierte DB Kontext ich den Zugriff auf Daten verwenden:

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

Und das ist die Label-Klasse

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

public class Label : BaseEntity 
{ 
} 
+0

Können Sie die Klasse "Label" veröffentlichen? – Eranga

+0

Dies ist die Label-Klasse: Öffentliche Klasse BaseEntity: IDataEntity { public int Id {get; einstellen; } public string Name {get; einstellen; } öffentliche Zeichenkette ChangedBy {get; einstellen; }} public class Label: BaseEntity {} – msaruyev

+0

Dieses Problem kann auch hier diskutiert wird: http://stackoverflow.com/questions/19646659/createdon-column-in-entity-framework-6 – AXMIM

Antwort

6

Eine Antwort auf meine Frage gefunden. Danke an alle für die Antworten.

Dies behebt das Problem und deaktiviert DB Änderungen in EF verfolgen.

+0

Danke, das war nützlich, aber ich nehme dies nur als eine temporäre Lösung für das Debugging, da ich nicht sicher bin, dass ich das DB Change Tracking für immer deaktivieren möchte ... (siehe meine Verwirrung) –

10

EF 4.3.1 CreatedOn Spalte zu der __MigrationHistory Tabelle hinzugefügt, die EF 5.0 nachträglich entfernt. Ich vermute, dass Sie seit der letzten Aktualisierung der Datenbank EF auf 4.3.1 aktualisiert haben.

Sie können entweder eine Migration ausführen, um die Spalte CreatedOn hinzuzufügen, sie manuell hinzufügen oder auf EF 5.0 aktualisieren, wo sie nicht mehr benötigt wird.

+0

DB wurde nicht geändert in irgendeiner Weise. Ich habe keine Tabelle "_migrationHistory" in DB und ich habe keine Berechtigungen, etwas in diesem DB zu ändern. Ich arbeite mit .NET Framework 4.0 und beim Versuch, ein Upgrade auf EF 5 mit NuGet erhalten Schema bezogene Ausnahmen: Schema angegeben ist nicht gültig. Fehler: (0,0): Warnung 0005: Schemainformationen für das Attribut 'Namespace' konnten nicht gefunden werden. (0,0): Warnung 0005: Schemainformationen für das Attribut 'Provider' konnten nicht gefunden werden. (0,0): warning 0005: Schemainformationen zum Attribut 'ProviderManifestToken' konnten nicht gefunden werden ... – msaruyev

+1

Die Tabelle __MigrationHistory finden Sie unter 'Systemtabellen'. Ich fürchte, ich habe keine Ahnung, was die Fehler beim Upgrade auf EF 5.0 sind, aber technisch sollte es auf .NET 4.0 funktionieren. –

+1

Das macht keinen Sinn, weil ich diesen Fehler bekomme und EF5 oder EF4 nie berührt habe. Ich benutze nur EF6: X. –

1

Tatsächlich gibt es in der Tabelle __MigrationHistory eine CreatedOn-Spalte, sodass das Problem möglicherweise auf EF-Migrationen zurückzuführen ist. Wenn es keine Codeänderungen, ausstehende Migrationen oder irgendetwas anderes gibt, ist der Fehler tatsächlich ein sehr seltsamer Fall.

PS. Ich fand das, es könnte sich als hilfreich erweisen: http://bstechnical.blogspot.fi/2012/08/invalid-column-name-createdon-code-first.html

+0

Wie Sie aus meinem benutzerdefinierten DB Kontext entnehmen können, habe ich bereits Configuration.AutoDetectChangesEnabled = false gesetzt, aber das hilft nicht. Gibt es eine andere Möglichkeit, die Erkennung von DB-Änderungen in EF zu deaktivieren? – msaruyev

13

In meinem Fall war es der MiniProfiler. Ich benutze EF 5.0, es benutzt EF 4.x. Nach dem Deaktivieren des Profilers wurde die Ausnahme nicht mehr ausgelöst.

Verwandte Themen