Korzystam z bazy danych Database First Entity Framework (EDMX) i projektów bazy danych SQL Server w bardzo udany sposób - zmień schemat w bazie danych i "Zaktualizuj model z bazy danych ", aby wprowadzić je do EDMX. Widzę jednak, że Entity Framework 7 zrzuci format EDMX i szukam nowego procesu, który pozwoli mi używać Code First w połączeniu z projektami baz danych.Proces rozwoju dla Code First Entity Framework i SQL Server Data Tools Projekty bazy danych
Wiele moich obecnych procesów programowania i wdrażania opiera się na posiadaniu projektu bazy danych, który zawiera schemat. Ta funkcja kontroli źródła jest wdrażana wraz z kodem i służy do aktualizacji produkcyjnej bazy danych wraz z migracją danych za pomocą skryptów przed i po wdrożeniu. Byłbym niechętny, aby go upuścić.
Chciałbym podzielić jeden duży EDMX na wiele mniejszych modeli w ramach tej pracy. Będzie to oznaczać wiele modeli Code First odnoszących się do tej samej bazy danych.
Zakładając, że mam istniejącą bazę danych i projekt bazy danych, który się z tym wiąże - myślę, że zacznę od użycia następującego kreatora, aby utworzyć początkowy zestaw encji i klas kontekstu - zrobiłbym to dla każdego z modele.
Add | New Item... | Visual C# Items | Data | ADO.NET Entity Data Model | Code first from database
Mój problem polega na tym, dokąd się udać? Jak obsługiwać zmiany schematu? Tak długo, jak mogę uzyskać zaktualizowany schemat bazy danych, mogę użyć operacji porównywania schematu, aby uzyskać zmiany w projekcie.
Oto opcje, które rozważam.
- Dokonaj zmian w bazie danych i użyj kreatora od góry, aby się zregenerować. Sądzę, że będę musiał zachować wszelkie modyfikacje encji i/lub klas kontekstu w klasach częściowych, aby nie zostały nadpisane. Automatyzacja tego z listą tabel itp., Które należy uwzględnić, byłaby przydatna. Może szablony Powershell lub T4? SqlSharpener (sugerowane przez Keitha w komentarzach) wygląda na to, że może pomóc tutaj. Chciałbym również spojrzeć na disabling all but the checks for database existence and schema compatibility tutaj, jak sugeruje Steve Green w komentarzach.
- Wprowadź zmiany w kodzie i używaj migracji, aby zastosować te zmiany do bazy danych. Z tego co rozumiem, niepoprawne mapowanie map do schematów bazy danych (moje nie) może stwarzać problemy. Widzę również kilka skarg na sieci, że migracje nie obejmują wszystkich typów obiektów bazy danych - to było również moje doświadczenie, gdy bawiłem się z Code First jakiś czas temu - unikalne ograniczenia, które moim zdaniem nie zostały uwzględnione. Czy to się poprawiło w Entity Framework 7?
- Wprowadź zmiany w bazie danych, a następnie użyj migracji jako pewnego rodzaju porównania kodu z bazą danych. Zobacz, jakie są różnice i dostosuj odpowiedni kod. Kontynuuj, aż nie będzie żadnych różnic.
- Dokonuj zmian ręcznie w kodzie i bazie danych. Oczywiście nie jest to zbyt atrakcyjne.
Który z nich byłby najlepszy? Czy jest coś, co powinienem wiedzieć przed próbą wdrożenia? Czy są jakieś inne, lepsze opcje?
Jeśli przejdziesz na trasę bez migracji, możesz przynajmniej zastosować czek przy starcie, aby upewnić się, że jesteś zsynchronizowany. https://coding.abel.nu/2012/03/prevent-ef-migrations-crom-creating-lub-changing-the-database/ –
Rozważ [SqlSharpener] (https://github.com/aeslinger0/sqlsharpener) aby ci pomóc z opcją # 1. – Keith
Dzięki @SteveGreene. To naprawdę brzmi, jakby to było warte zachodu. Dodałem Twoją sugestię do punktu 1. –