2013-08-08 6 views
6

Mam dziwny problem, gdy aktualizuję model EF (ver 5). Usuwa wszystkie klasy należące do tego modelu.Dlaczego studio graficzne usuwa moje klasy, gdy aktualizuję model struktury encji

Moja sytuacja była taka. Zmieniłem kolumnę kluczową dwóch tabel, które mają odniesienia do mojej głównej tabeli. Aktualizacja modelu nie wprowadziła tych zmian do edmx, więc usunąłem te trzy tabele (podstawowe i dwie tabele wyszukiwania), zapisałem edmx. Następnie zaktualizowano model i dodano te tabele.

Po zapisaniu modelu po jego zaktualizowaniu, VS usunął wszystkie pliki klas dla tego edmx. Edmx nadal wygląda dobrze ze wszystkimi tabelami, po prostu klasy się skończyły. Muszę następnie cofnąć moje ostatnie zmiany i spróbować ponownie.

Jedną z rzeczy, która zadziałała była ręczna edycja pliku edmx, aby wprowadzić odpowiednie zmiany w zaatakowanych klasach, ale nie rozumiem, dlaczego powinienem to zrobić.

Jakieś pomysły tam?

Dzięki!

Odpowiedz

0

można spróbować jednego z następujących czynności:

1) prawym przyciskiem myszy na pliku w oknie Solution Explorer w Visual Studio „.edmx”, a następnie wybrać z menu «Uruchom narzędzie niestandardowe».

2) Tuż pod paskiem tytułu Eksploratora rozwiązań dostępny jest przycisk z napisem "Przekształć wszystkie szablony". Kliknij go. Powinien zaktualizować modele w pliku "YourEdmxFileName.tt".

3) W menu "Kompilacja" programu Visual Studio wybierz "Przekształć wszystkie szablony T4".

4) Znajdź poszczególne pliki szablonów T4 (* .tt), kliknij je prawym przyciskiem myszy i wybierz polecenie "Uruchom narzędzie niestandardowe".

+0

Skończyło się na znalezieniu "Przekształć wszystkie szablony T4" w menu "Kompilacja", ale nie udało się odbudować edmx, z którym miałem problemy. W końcu właśnie przywróciłem kod i ręcznie edytowałem plik. – Bauer

+0

mają ten sam problem .. bardzo głupi problem .. dzieje się przypadkowo czasami, gdy odświeżam od bazy danych po zmianie czegoś takiego jak nieważny na zerowalny – krilovich

0

To samo przydarzyło mi się. Miałem tabelę z wartością ciągu, ale chciałem zmienić to na klucz obcy, aby móc przechowywać powtarzające się wartości ciągów w oddzielnej tabeli. Stworzyłem więc nową tabelę, a ja zmieniłem typ kolumny na niezerowalny int i dodałem klucz obcy. Kiedy zaktualizowałem model, oznaczono wszystkie klasy jednostek jako usunięte ... nie śmieszne.

Widziałem również pojawiały się błędy wskazujące, że EF nie zmieniło typu kolumny z ciągu na int.

Rozwiązania wymienione powyżej (narzędzie niestandardowe i przekształcenie wszystkich szablonów) nie sprawdziły się.

Dla mnie rozwiązaniem była zmiana typu kolumny z ciągu na int manualnie w modelu, a następnie zaktualizowanie modelu, nie wystąpiły więcej problemów.

Dla przypomnienia: to się stało w EF 4 w Visual Studio 2010.

+0

To właśnie mi się przydarzyło przy użyciu Visual Studio 2013 i Entity Framework Version 6.0.0.0, z wersją runtime z wersji 4.0.30319. Właśnie dodałem dwie procedury przechowywane bez zmiany modelu. Ten problem przydarzył mi się w przeszłości przy innej okazji, bez zauważenia zmiany w modelu, który ją spowodował. Używam tej technologii od ponad dwóch lat. @ @beastieboy, Nie znalazłem nic w funkcji Run Custom Tool, ani nie znalazłem przycisku, o którym wspomniałeś. –

+0

Dodałem także związek klucza obcego. –

0

Aby rozwiązać tę sytuację, przeniosłem wszystkie pliki definicji tabeli się z katalogu, że mój model znajduje się w I wtedy. powiedział programowi Team Explorer, aby przywrócił skasowane dane. Dodał pliki z powrotem do mojego katalogu i mogłem kontynuować.

+0

Nie używałem tfs, używałem subversion. – Bauer

6

Jednym ze sposobów postępowania po usunięciu, a następnie ponownym dodaniu tabeli, aby EDMX przechwycił zmianę w kolumnie klucza obcego (FK).

Dzieje się tak, ponieważ relacje z innymi tabelami nie są odświeżane.

Za tę odpowiedź, https://stackoverflow.com/a/34144341, w celu ręcznego naprawienia tego, filtruj listę błędów za pomocą "Tylko kompilacja", a następnie ręcznie usuń wszystkie błędy kompilacji w edytorze EDMX. Zwróć uwagę na wielość relacji.

Alternatywnie, kontrola wersji użycie przywrócić całą zmianę EDMX i zacząć od nowa, stosując następujące metody:

Zamiast usunięcie i ponowne dodanie tylko tabelę zawierającą kolumnę FK że zmieniło, usunąć i ponownie dodać wszystkie tabele, które mają jakikolwiek związek z dowolną zmienioną kolumną FK.

0

Upewnij się, że nie masz żadnej zmiennej o konwencji nazewnictwa _. Jeśli jest, EF nie powiedzie się i ponownie zapisze wszystkie klasy.

Zmiana nazwy zmiennej p_ pomogła mi.

0

Miałem podobny problem.

Korzystam z VS2013, EF6 i łączę się z ORACLE 11G (najpierw baza danych).

Dodałem stół, który miał klucz obcy do innego stołu. Z jakiegoś powodu typ klucza obcego był inny w tych dwóch tabelach.

Aktualizacja klucza obcego rozwiązać mój problem.