2012-06-24 18 views
6

Po dodaniu nowej tabeli, która ma pewne powiązania z moją bazą danych, a następnie uruchomię Add-Migration widzę, że kod jest generowany w metodzie Up, aby dodać tabelę i jej relacje. Jednak wolę definiować relację za pomocą płynnego interfejsu API w metodzie OnModelCreating. W jaki sposób te dwie metody wchodzą w interakcje? Czy mogę usunąć kod z metody Up, która definiuje relację dla instancji?Jak odnoszą się migracje OnModel i migracje automatyczne?

Odpowiedz

11

Każdy z nich ma zupełnie inny cel:

  • OnModelCreating służy do definicji inline-biegle API modelu. Te definicje wraz z domyślnymi konwencjami, adnotacjami danych i klasami konfiguracji stanowią kompletną definicję modelu.
  • Explicit migracji określa, co należy zrobić, aby przenieść je do bazy danych do postaci wymaganej przez obecnego modelu

Teraz, w jaki sposób te dwa odnoszą? Migracja ma dwa wejścia, które służą do generowania kodu migracji (metody Up i Down). Jedno wejście jest ostatnim rekordem migracji przechowywanym w tabeli __MigrationHistory. Ten rekord zawiera serializowany model reprezentujący bazę danych. To wejście jest opcjonalne, ponieważ pierwsza migracja musi działać bez niego. Drugie wejście jest obowiązkowe - bieżący model jest pobierany przez wykonanie kodu w bieżącym zestawie =>Add-Migration wykona twój OnModelCreating, aby uzyskać bieżący model i porównać go z modelem pobranym z bazy danych. Wynikiem porównania jest zawartość metod Up i Down w migracji jawnej.

+1

Dzięki! Tak więc, jeśli dobrze zrozumiem, kod w metodzie "Up" będzie odzwierciedlał definicje ustawione w metodzie "OnModelCreating" (zakładając, że dodałeś Migration po napisaniu płynnej definicji API oczywiście). Nie wolno * nie * usuwać tych odbitych definicji z 'Up'. – Dabblernl

+0

Tak, to prawda. –

Powiązane problemy