2008-10-08 4 views
7

Używam tego sprytnego narzędzia LINQ do SQL dla warstwy dostępu do danych w projekcie asp.net. Ciągle wprowadzam zmiany w tabelach bazowych i aby klasy danych rozpoznały zmianę, którą muszę usunąć i odczytać tabelę, która uległa zmianie. Czy jest jakiś skrót do regeneracji warstwy danych?Linq do Regeneracji klasy SQL

Odpowiedz

5

Wpadłem na ten sam problem i użycie sqlmetal jest zdecydowanie dobrym sposobem na rozwiązanie tego problemu. Jednym ze sposobów jest stworzenie pliku wsadowego, który wykonuje polecenie sqlmetal iw ten sposób można po prostu uruchomić tę partię, gdy trzeba zaktualizować klasę Linq do SQL, ale najlepszym rozwiązaniem jest użycie funkcji Narzędzia Tools-> Narzędzia zewnętrzne Visual Studio. utwórz polecenie w Visual Studio, które uruchamia sqlmetal z twoimi parametrami. Działa to świetnie, a nawet można upuścić utworzone polecenie na pasku narzędzi w celu przebudowania jednym kliknięciem.

+0

Jak mogę zachować moje leniwy załadowane właściwości? Kiedy regeneruję model przy użyciu sqlmetala, tracę te właściwości FK, które ustawiłem jako leniwy załadowany. Czy istnieje sposób, aby je zatrzymać? Dziękuję Ci! – emzero

3

Można użyć sqlmetal, który jest generatorem klasy wiersza poleceń dla klas linq do sql.

1

Dla sytuacji/modeli, w których SQLMetal nie całkiem je wycina, np. z powodu różnych konwencji nazewnictwa w bazie danych i modelu lub innych dostosowań w modelu L2S mam dodatek do Visual Studio, który dodaje polecenia do synchronizacji twojego projektanta L2S z bazową bazą danych [schemat]. (Plus kilka innych L2S i EF związanych cech)

Możesz przeczytać więcej na ten temat, pobrać go i uzyskać 30-dniową licencję próbną z http://www.huagati.com/dbmltools/

1

LINQ to SQL w wersji 1 nie obsługuje wykrywania schematu bazy danych zmiany. Jedynym sposobem zmodyfikowania wygenerowanych klas jest ich ponowne wygenerowanie za pomocą projektanta lub SQLMetala.

Należy pamiętać, że nie ma zbyt wielu różnic między SQLMetal a projektantem, projektant jest bardziej "ładnym" interfejsem użytkownika SQLMetal i ukrywa wiele przełączników wiersza poleceń.

Używam projektanta, ponieważ jestem zbyt leniwy, aby stale ładować wiersz polecenia.

Ponadto upewnij się, że nie piszesz żadnego własnego kodu do wygenerowanych klas, w przeciwnym razie stracisz je podczas regeneracji. Wszystkie generowane klasy są częściowe, co oznacza, że ​​możesz łatwo dodać własne przedłużenia w osobnym pliku.

0

W przeszłości, w którym pracowałem, stworzyliśmy klasę opakowania dla DataContext wygenerowanego przez sqlmetal. Następnie stworzyliśmy cienką warstwę danych, która zachowała prywatność DataContext i wszystkie klasy generowane przez sqlmetal.

Jeśli jakiekolwiek operacje w oprogramowaniu wymagały informacji z bazy danych, musiały przejść tę warstwę opakowania, aby ją uzyskać. Innymi słowy, LINQ do SQL nie może pojawić się poza tą warstwą danych.

W ten sposób, gdy będziemy musieli zregenerować klasy za pomocą sqlmetal, tylko części warstwy danych mogą ulec uszkodzeniu. Znacznie łatwiej naprawić jedną warstwę, w której cały kod dostępu do danych jest, niż zmienić posypki LINQ na SQL w całej logice lub w domenie aplikacji.