5

Używam EF od jakiegoś czasu, zawsze w podejściu Model-First. Teraz podróżuję po ziemiach Code-First. Chodzi o to, że mam problemy z automatycznym tworzeniem tabel.EntityFramework nie tworzy tabel

Według niektórych stron jest to możliwe. I próbowałem ich podejścia bez powodzenia.

Oto jedna z tych rzeczy, próbowałem: Database.CreateIfNotExists()

Nie traf ...

Moje ciąg połączenia jest idealny i pracy. Jeśli dodaję tabelę ręcznie, to działa. Problem polega na tym, że nie mam utworzonego stołu. Po prostu nie tworzy tak, jak mi powiedziano.

Moje zajęcia są poprawnie urządzone. (Ponownie: działa, gdy mam utworzone bazy danych)

Jakieś sugestie? Czy ta funkcja naprawdę działa?

Używam:

Visual Studio 2010 Professional

EntityFramework 4.3.1 (chociaż próbowałem też z 4,1)

SQL Server 2008 R2

Dzięki z góry.

+0

Czy stworzyłeś własną klasę kontekstu, która wywodzi się z DbContext? a następnie wykonać wywołanie, które będzie używać DbSet Encje w kontekście – Sergey

+2

Database.CreateIfNotExists() spowoduje tylko EF do utworzenia tabeli, jeśli sama baza danych nie istnieje (w tym przypadku tworzy bazę danych i tabelę). Nie spowoduje automatycznego utworzenia tabeli, jeśli istnieje baza danych, ale brakuje tej tabeli. Czy to może być to, na co się natknąłeś? –

+0

@Sergey Tak, zrobiłem to. – eestein

Odpowiedz

5

Istnieją trzy inicjalizatory bazy danych, które są dołączone do struktury encji, wszystkie one implementują interfejs IDatabaseInitializer<Context>. Są to:

  • CreateDatabaseIfNotExist (domyślnie)
  • DropCreateDatabaseWhenModelChanges
  • DropCreateDatabaseAlways

Jak widać domyślne API nie ma inicjator że właśnie tworzy tabele, zamiast robi całą bazę danych. Istnieją jednak inne inicjatory, które ludzie stworzyli, jest taki, który robi dokładnie to samo, co chcesz.

Jest w pakiecie Nuget EFCodeFirst.CreateTablesOnly

Inną opcją jest stworzenie własnego inicjator jeśli to jest coś, czego naprawdę potrzebujesz.

+0

Dziękuję za odpowiedź. Później dziś wieczorem spróbuję i dam ci znać, jak poszło, akceptując odpowiedź. Dzięki jeszcze raz! – eestein

+0

Nie ma za co :) – Sergey

+0

To zadziałało, dzięki człowieku. – eestein

Powiązane problemy