Błąd - Invalid column name

0

Uczę się mvc. Mam bardzo prostą tabelę dodałem do niej model, kontroler i wszystko grało. Dopóki nie zachciało mi się dodać nowej kolumny wtedy zaczęło się sypać.
Tak wygląda tabela:

    [Id]     INT           IDENTITY (1, 1) NOT NULL,
    [Author] VARCHAR (100) NOT NULL,
    [Title]  VARCHAR (100) NOT NULL,
    [ISBN]   INT           NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)

tak model

public class BookDB
    {
        public int Id { get; set; }
        public string Author { get; set; }
        public string Title { get; set; }
        public int ISBN { get; set; }
    }
    public class BookDbContext : DbContext
    {
        public DbSet<BookDB> Books { get; set; }
    }

Dodałem kolumnę ISBN i zaczęło wywalać Invalid column name ISBN (przy tym stworzyłem od nowa controler i view).
Nawet jak wywaliłem całą tabelę i uruchomiłem projekt na pustej bazie to wywala ten sam błąd.
Załączam cały projekt. Gdyby ktoś mógł go uruchomić, kliknąć w Books i powiedzieć co spieprzyłem było by fajnie.

Ps: Chciałem dodać załącznik w jednym pliku ale wtedy za każdym razem wywalało "Nieobsługiwane rozszerzenie" czy coś w tym stylu. I to nieważne czy było .zip czy .rar

1

Pobrałem odpaliłem i program zadziałał bez problemu. Ale dodałem kolejną kolumnę i wystąpił ten sam błąd co u Ciebie, przyczyną okazało się że nie sprawdzasz czy model w kodzie jest zgodny z tym co jest w bazie bo nie aktualizujesz samego modelu w bazie gdy są różnice. Więc trzeba aktualizować w dwóch miejscach raz w modelu dwa na bazie. No i tu się pojawia problem bo dodać linijkę w kodzie to bez problemu to podczas dodawania nowej kolumny w bazie z poziomu VS mogłeś nie zauważyć że ci się skrypty nie wykonał i stąd wziął się problem.

Ale nawet jak by dodać sprawdzanie:

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        
        {
           Database.SetInitializer<BookDbContext>(new DropCreateDatabaseIfModelChanges<BookDbContext>());
           // Itd...
        }
    }

to i tak się wysypie błędem:
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.

Więc po drodze jeszcze coś namieszałeś. ;)

Ale jak Ci nie zależy zawsze możesz dać po prostu:

Database.SetInitializer<BookDbContext>(new DropCreateDatabaseAlways<BookDbContext>());

Ale jak dla mnie to zaorać i zrobić od nowa. ;)

2

Alternatywnie można się dowiedzieć czym są w EF migracje ;)
http://msdn.microsoft.com/pl-pl/data/jj591621.aspx

0

Dzięki, później zobaczę co to są te migracje.

Nie wiem czy dobrze rozumiem, gdybym dał to

Database.SetInitializer<BookDbContext>(new DropCreateDatabaseIfModelChanges<BookDbContext>());

albo to

Database.SetInitializer<BookDbContext>(new DropCreateDatabaseAlways<BookDbContext>());

To w pierwszym wypadku może wywalić a w drugim na pewno wywali mi całą bazę wraz z danymi? Bo wolałbym czegoś takiego nie robić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1