Entity Framework downgrade

Jeg har lige været lidt eventyrlysten og opgraderet et MVC 4 projekt fra EF5 til EF6. Efter det havde jeg lidt problemer med at få mit site til at køre på serveren (efter web deploy og auto migrations på serveren).

Fint nok, så nedgraderer jeg bare til EF5 igen og så burde den jo være i vinkel... men ak, så let skulle det ikke gå. Flg. fejl opstod når jeg prøvede at publisere:

Cannot insert the value NULL into column 'ContextKey', table 'ScabsContext.dbo.__MigrationHistory'; column does not allow nulls. INSERT fails. The statement has been terminated.

OK, nu er jeg ikke 100 meter mester udi tabelstrukturen på MigrationHistory, så jeg tænte der måtte være en uoverensstemmelse mellem EF-versionerne i de forskellige komponenter i min solution, så jeg sikrede mig, at alle versioner var ens. Lige lidt hjalp det.

Hmm... Google! Kommer op med et Stack Overflow-indlæg, som omhandler dette emne (SO styrer for vildt!).

Det viser sig, at EF6 tilføjer en ny kolonne i MigrationHistory, som hedder (trommehvirvel!) - ContextKey.

Denne ContextKey bliver jo ikke fjernet fra tabellen igen, bare fordi man nedgraderer fra EF6 til EF5, så når en migration køres fra EF5 mod en EF6 MigrationHistory... ja, så får du førnævnte fejl.

Dette kan løses ved at udføre flg. ændringer på MigrationHistory-tabellen:

ALTER TABLE dbo.__MigrationHistory DROP CONSTRAINT [PK_dbo.__MigrationHistory2]

ALTER TABLE dbo.__MigrationHistory DROP COLUMN ContextKey

ALTER TABLE dbo.__MigrationHistory ADD CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY (MigrationId)

ALTER TABLE dbo.__MigrationHistory ALTER COLUMN MigrationId NVARCHAR(255) NOT NULL

Så skulle den tabel vist være tilbage i EF5-format!
 

Comment