2012-02-20 16 views
6

Stworzyłem nowy projekt i dodałem do niego nowy framework encji (wersja 4.3). Stworzyłem klasy i kontekst tak, jak w poprzednich wersjach EF. Jednak podczas pierwszego biegu, gdy baza danych powinna być utworzony (w moim przypadku jest to SQL Server 2005), Otrzymuję następujący błąd:Entity Framework 4.3 nie tworzy bazy danych

An error occurred while executing the command definition. See the inner exception for details.

z następującym wewnętrznym wyjątek:

Invalid object name 'dbo.__MigrationHistory'.

Jak rozumiem, ta tabela dotyczy migracji, ale ta tabela nie istnieje, jeśli nie ma bazy danych. czy robię coś źle?

Więcej informacji: Dla celów testowych I stworzył tylko jedną klasę:

public class Test 
{ 
    [Key] 
    public int TestId { get; set;} 

    public string Name {get; set;} 
} 

public class Context : DbContext 
{ 
    public Context() : base("MyConnection") 
    { 
    } 

    public DbSet<Test> Tests { get; set;} 
} 

UPDATE 1

Po kilku testach zdałem sobie sprawę, że aplikacja jest rzucanie nieobsługiwany wyjątek od visual studio i złamać w wizualny studio. Wyjątkiem był System.Data.EntityCommandExecutionException. Po zignorowaniu tego wyś wietlenia i nie zatrzymałem wykonywania kodu, utworzono bazę danych.

UPDATE 2

Po kolejnych kilku godzinach pracy z bazą danych okazało się, że gra z opcji Enable-migracje i update-Database z konsoli też jest rozwiązanie tego problemu. Tworzy bazę danych przed uruchomieniem aplikacji i nie łamie się w Visual Studio.

+0

wygląda jak coś nie jest zsynchronizowany http://stackoverflow.com/questions/3986160/an-error-occurred-while-executing-the-command-definition-see-the-inner-exceptio –

+0

cię mieć ręcznie utworzone klasy? lub użyłeś kreatora –

+0

Do testowania stworzyłem tylko jedną klasę o nazwie Test with TestId jako [Key] i właściwość string o nazwie name. Nie ma nic więcej. – Marcin

Odpowiedz

3

Czy możesz spróbować usunąć swój konstruktor, aby EF używał jego domyślnego ciągu połączenia.

public Context() : base("MyConnection") 
{ 
} 

W przeciwnym razie, można spróbować aktualizacji bazy danych z poziomu konsoli Package Manager, aby zobaczyć czy masz żadnych dalszych informacji.

Update-Database -Verbose 

Ewentualnie niezwiązane w twoim przypadku, ale pojawia się ten sam błąd przy użyciu MvcMiniProfiler 1.9. Jeśli używasz go też upewnić EF profilowanie jest wyłączony przez zakomentowanie linię:

//MiniProfilerEF.Initialize(); 

W MiniProfiler App_Start.


Dla innych osób, u których występuje podobny problem, stwierdziłem, że ponowne włączanie migracji z konsoli programu Package Manager może pomóc w niektórych przypadkach. Przed wykonaniem tej czynności upewnij się, że masz kopię konfiguracji migracji.

Enable-Migrations -Force 
+0

Jeśli tylko było tak, że możesz zrobić oświadczenie "Upewnij się, że masz kopię swojej konfiguracji migracji przed wykonaniem tego." Wyróżnij się bardziej :) Wszystkie rzeczy 'Configuration.cs' zostają skasowane w ten sposób :) –

2

... i po prostu dodać jeszcze jedną możliwą odpowiedź dla wszystkich tych, którym grozi podobny problem
(uwaga: jest to otwarty historia wydaje się, ponieważ nie są oczywiście pewne błędy nadal z migracją część)... Ten link był najbliżej, co potrzebne
Error when running Update-Database with EF 4.3 tak, trzeba zrobić 3 rzeczy (w tej kolejności - i mam na myśli istniejącego projektu):
(wszystko w konsoli PM)

  • Upewnij się, że "domyślny projekt" w PM Console jest ustawiony na pożądany projekt (np. Dla większych rozwiązań) - to niekoniecznie pasuje do twojego projektu startowego! (I ściśle obserwować komentarze/odpowiedzi w PM, czy czynności zostały wykonane w ramach projektu chcesz)
  • (1) Enable-Migrations -force
  • (2) Add-Migration Initial
  • (3) Update-Database -Verbose

... jeśli wciąż wyjątek w konsoli PM

  • (4) wtedy może trzeba „ruch” projektu do korzeni

To brzmi głupio Wiem, ale to był główny problem po mojej stronie - miałem kilka folderów z rozwiązaniami, a którekolwiek z powyższych zawiodłyby w projektach w folderach rozwiązania. Jednak, gdy przeniosłem projekt do korzeni, wszystko działało w porządku (nie więcej wyjątków, z lub w/o wyjątki pierwszej szansa dla CLR włączone lub wyłączone) ...
nadzieję, że to pomoże komuś

EDIT : jeśli twój projekt modelu danych (EF CF) jest biblioteką - ustaw ten projekt jako "domyślny projekt" w konsoli PM - i uruchom wszystkie powyższe rzeczy bezpośrednio na tym projekcie (i skonfiguruj migrację itp. W bibliotece samo). W przeciwnym razie nie powiedzie się (i ten sam wyjątek MigrationHistory pojawia się również, gdy model jest biblioteką - i nie zdefiniowano dla niej migracji, wewnątrz niej - a migracja jest zdefiniowana w "głównym projekcie").

EDYTOWANIE: musisz przenieść zarówno lib (model EF) i projektu "startowego" (nazywając go) do katalogu głównego.

Powiązane problemy