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?
6
A
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.
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
Tak, to prawda. –