2012-08-30 13 views
16

Zajmuję się tworzeniem aplikacji ASP.NET MVC 4 przy użyciu VS 2010 i EF 4.3. Pobieranie niektórych danych z zewnętrznej bazy danych i wszystko działało zgodnie z oczekiwaniami, dopóki nie próbowałem przekompilować go w jeden dzień. Po kompilacji otrzymuję następujący błąd EFEntity Framework 4.3. Nieprawidłowa nazwa kolumny "CreatedOn"

Invalid column name 'CreatedOn'.

No dB lub zmiany kodu zostały wykonane - Ja po prostu dodaje jakieś wgniecenia dla czytelności. Poprzednie wersje aplikacji z TFS również generują ten sam wyjątek.

Nie mam żadnej właściwości w moich jednostkach i nie ma takiego pola w bazie danych, więc nie potrzebuję tego i nie chcę tego w żadnym wypadku.

Co należy zrobić, aby uniknąć tego wyjątku?

To jest mój zwyczaj kontekst DB używam danych Access:

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

I to jest klasa 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

Czy możesz opublikować klasę "Label"? – Eranga

+0

To jest klasa etykiety: klasa publiczna BaseEntity: IDataEntity { public int Id {get; zestaw; } public string Name {get; zestaw; } public string ChangedBy {get; zestaw; }} public class Label: BaseEntity {} – msaruyev

+0

Ten problem jest również omówione tutaj: http://stackoverflow.com/questions/19646659/createdon-column-in-entity-framework-6 – AXMIM

Odpowiedz

6

Znaleziono odpowiedź na moje pytanie. Dziękuję wszystkim za odpowiedzi.

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

Rozwiązuje to problem i wyłącza śledzenie zmian DB w EF.

+0

Dzięki, że to było przydatne, jednak przyjmuję to tylko jako tymczasową poprawkę do debugowania, ponieważ nie jestem pewien, czy chcę wyłączyć śledzenie zmiany DB na zawsze ... (zobacz moje zamieszanie) –

10

EF 4.3.1 dodaje kolumnę CreatedOn do stołu, który __MigrationHistory EF 5.0 usunięto później. Podejrzewam, że zaktualizowałeś EF do wersji 4.3.1 od ostatniej aktualizacji bazy danych.

Można przeprowadzić migrację, aby dodać kolumnę CreatedOn, ręcznie dodać ją samodzielnie lub uaktualnić do wersji EF 5.0, gdzie nie jest już potrzebna.

+0

DB nie została zmieniona w jakikolwiek sposób. Nie mam tabeli "_migrationHistory" w DB i nie mam uprawnień do zmiany czegoś w tym DB. Pracuję z .net framework 4.0 i przy próbie aktualizacji do wersji EF 5 z NuGet odbiera wyjątki związane ze schematem: Określony schemat jest niepoprawny. Błędy: (0,0): ostrzeżenie 0005: Nie można znaleźć informacji o schemacie dla atrybutu "Namespace". (0,0): ostrzeżenie 0005: Nie można znaleźć informacji o schemacie dla atrybutu "Dostawca". (0,0): ostrzeżenie 0005: Nie można znaleźć informacji o schemacie dla atrybutu "ProviderManifestToken" ... – msaruyev

+1

Znajdziesz tablicę __MigrationHistory w "Tabele systemowe". Obawiam się, że nie mam pojęcia, jakie są błędy podczas uaktualniania do wersji EF 5.0, ale technicznie powinien działać na .NET 4.0 –

+1

To nie ma sensu, ponieważ dostaję ten błąd i nigdy nie dotknąłem EF5 ani EF4. Używam tylko EF6: X. –

1

W rzeczywistości istnieje kolumna CreatedOn w tabeli __MigrationHistory, więc problem może być związany z pewnymi migracjami EF. Jeśli nie ma zmian w kodekach, oczekujących migracji lub cokolwiek, błąd jest naprawdę bardzo dziwny.

PS. Znalazłem to, może to okazać się pomocne: http://bstechnical.blogspot.fi/2012/08/invalid-column-name-createdon-code-first.html

+0

Jak widać z mojego niestandardowego kontekstu DB, już ustawiłem Configuration.AutoDetectChangesEnabled = false, ale to nie pomoże. Czy istnieje inny sposób wyłączenia wykrywania zmian db w EF? – msaruyev

13

W moim przypadku był to MiniProfiler. Używam EF 5.0, używa EF 4.x. Po wyłączeniu profilera wyjątek nie był już zgłaszany.

Powiązane problemy