Odpowiedzi:
Istnieją trzy sposoby synchronizacji modelu.
Usuń zmodyfikowane tabele z projektanta i przeciągnij je z powrotem na powierzchnię projektanta z Eksploratora bazy danych. Przekonałem się, że aby to działało niezawodnie, musisz:
za. Odśwież schemat bazy danych w Eksploratorze bazy danych (kliknij prawym przyciskiem myszy, odśwież)
b. Zapisz projektanta po usunięciu tabel
c. Zapisz ponownie po przeciągnięciu tabel z powrotem.
Pamiętaj jednak, że jeśli zmodyfikowałeś jakieś właściwości (na przykład, wyłączając właściwość potomną powiązania), to oczywiście utracisz te modyfikacje - będziesz musiał je wprowadzić ponownie.
Użyj SQLMetal, aby zregenerować schemat z bazy danych. Widziałem wiele postów na blogu, które pokazują, jak to zrobić .
Wprowadź zmiany bezpośrednio w panelu Właściwości DBML. Działa to w przypadku prostych zmian, takich jak dopuszczanie wartości zerowych w polu.
Projektant DBML nie jest domyślnie instalowany w Visual Studio 2015, 2017 lub 2019. Będziesz musiał zamknąć VS, uruchomić instalator VS i zmodyfikować instalację. Narzędzia LINQ to SQL to funkcja, którą musisz zainstalować. W przypadku wersji VS 2017/2019 można go znaleźć w części Pojedyncze komponenty> Narzędzia kodu .
Aby zaktualizować tabelę na diagramie .dbml, na przykład dodając kolumny, wykonaj następujące czynności:
Możesz również sprawdzić zestaw szablonów generowania kodu PLINQO , oparty na CodeSmith, które pozwalają ci robić wiele schludnych rzeczy dla Linq-to-SQL:
Sprawdź stronę PLINQO pod adresem http://www.plinqo.com i obejrzyj filmy wprowadzające.
Drugim narzędziem, które znam, są narzędzia Huagati DBML / EDMX , które umożliwiają aktualizację plików mapowania DBML (Linq-to-SQL) i EDMX (Entity Framework) i wiele innych (takich jak konwencje nazewnictwa itp.).
Marc
Używamy niestandardowego napisanego szablonu T4, który dynamicznie odpytuje model Information_schema dla każdej tabeli we wszystkich naszych plikach .DBML, a następnie nadpisuje części pliku .DBML świeżymi informacjami o schemacie z bazy danych. Ja bardzozalecam wdrożenie takiego rozwiązania - zaoszczędziło mi to mnóstwo czasu, a w przeciwieństwie do usuwania i ponownego dodawania tabel do modelu, możesz zachować swoje skojarzenia. Dzięki temu rozwiązaniu będziesz otrzymywać błędy podczas kompilacji, gdy zmieni się twój schemat. Chcesz się upewnić, że używasz systemu kontroli wersji, ponieważ różnicowanie jest naprawdę przydatne. To świetne rozwiązanie, które działa dobrze, jeśli programujesz w oparciu o pierwsze podejście do schematu DB. Oczywiście nie mogę udostępniać kodu mojej firmy, więc jesteś sam, ponieważ sam to napisałeś. Ale jeśli znasz trochę Linq-to-XML i możesz iść do szkoły w tym projekcie , możesz dostać się tam, gdzie chcesz być.
Poleciłbym użycie projektanta wizualnego wbudowanego w VS2008, ponieważ aktualizacja pliku dbml aktualizuje również wygenerowany kod. Modyfikacja pliku dbml poza projektantem wizualnym spowodowałaby brak synchronizacji bazowego kodu.
Uaktualnienie tabel, a następnie aktualizacja DBML jest niuansowe ... Relacje klucza obcego nie zawsze są natychmiast przenoszone, jeśli zostaną wprowadzone zmiany w istniejących tabelach. Obejście polega na wykonaniu kompilacji projektu, a następnie ponownym dodaniu tabel. Zgłosiłem to do MS i zostało to naprawione dla VS2010.
Wyświetlanie DBML nie pokazuje nowych ograniczeń klucza obcego
Pamiętaj, że instrukcje podane w głównej odpowiedzi nie są jasne. Aby zaktualizować tabelę
W przypadku aktualizacji procedury składowanej należy ją usunąć z pliku .dbml i ponownie zainstalować. Ale jeśli procedura składowana ma dwie ścieżki (np. Jeśli coś; wyświetl niektóre kolumny; w przeciwnym razie wyświetl inne kolumny), upewnij się, że obie ścieżki mają takie same aliasy kolumn !!! W przeciwnym razie będą istnieć tylko pierwsze kolumny ścieżek.
Oto pełna metoda krok po kroku, która działała dla mnie w celu zaktualizowania LINQ do SQL dbml i powiązanych plików w celu włączenia nowej kolumny, którą dodałem do jednej z tabel bazy danych.
Musisz dokonać zmian na powierzchni projektowej, jak sugerują inne powyżej; musisz jednak wykonać dodatkowe czynności. Oto pełne kroki:
1. Drag your updated table from Server Explorer onto the design surface
2. Copy the new column from this "new" table to the "old" table (see M463 answer for details on this step)
3. Delete the "new" table that you just dragged over
4. Click and highlight the stored procedure, then delete it
5. Drag the new stored procedure and drop into place.
6. Delete the .designer.vb file in the code-behind of the .dbml
(if you do not delete this, your code-behind containing the schema will
not update even if you rebuild and the new table field will not be included)
7. Clean and Rebuild the solution (this will rebuild the .designer.vb file to include all the new changes!).