Używam Entity Framework 4 z podejściem Model First.
Rozpocząłem projekt, zaprojektowałem encje i wygenerowałem bazę danych. Wszystko działało dobrze.
Potem musiałem wrócić i dodać kolejną jednostkę do mojego modelu. Jednak gdy przeciągam obiekt do EDMX, pojawia się ten błąd:
W porządku! Muszę tylko zmapować Entity1 do tabeli .. Ale hej! Używam podejścia Model First, spodziewam się, że utworzy dla mnie tabelę podczas generowania DDL.
Jak obejść ten błąd?
.net
entity-framework
entity-framework-4
André Pena
źródło
źródło
Odpowiedzi:
Dzieje się tak ze względu na sposób, w jaki EF4 działa z pierwszym modelem.
Podczas tworzenia pierwszego modelu model jest w stanie, w którym SSDL nie istnieje. Możesz przeciągać jednostki, kojarzyć je i tak dalej, ale jeśli spojrzysz na SSDL w pliku EDMX, zobaczysz, że żadna z jednostek nie ma skojarzonej tabeli magazynu w SSDL.
Zmienia się po kliknięciu
Generate Database From Model
elementu menu kontekstowego. Mylące jest to, że ta czynność robi więcej niż tylko generowanie skryptu DDL. W rzeczywistości zmienia plik EDMX, aby zawierał informacje SSDL. Od tego momentu plik EDMX wejdzie w stan, w którym każda jednostka w projektancie / CSDL musi mapować do jednostki w SSDL. Jeśli nie zostanie zmapowane, spowoduje to błąd czasu kompilacji:Innym interesującym faktem jest to, że nie jest to rodzaj błędu, który uniemożliwi kompilację. W rzeczywistości wygeneruje bibliotekę klas wyjściowych. Czy nie powinno to być ostrzeżenie czy coś takiego?
Aby zapobiec temu błędowi, wszystko, co musisz zrobić po wstawieniu nowego elementu, to
Generate Database From Model
ponownie. To zaktualizuje SSDL i naprawi mapowania.EDYTOWAĆ
Jeśli nie używasz najpierw modelu i „aktualizujesz z bazy danych”, ten błąd wystąpi również w przypadku usunięcia tabeli na serwerze DB. Dzieje się tak, ponieważ Entity Framework nie usunie automatycznie jednostki za Ciebie. Usuń jednostkę ręcznie, a błąd zniknie.
źródło
Okazało się, że pojawia się ten sam błąd, ponieważ zapomniałem utworzyć wiązanie referencyjne po utworzeniu skojarzenia między dwoma podmiotami.
źródło
Jeśli tworzysz model z Entities Framework, czasami możesz napotkać ten irytujący błąd:
Może to nie mieć sensu, gdy wszystko wygląda dobrze na EDM, ale to dlatego, że ten błąd zwykle nie ma nic wspólnego z EDM. Powinien powiedzieć „zregeneruj pliki bazy danych”.
Widzisz, jednostki sprawdzają SSDL i MSL podczas kompilacji, więc jeśli właśnie zmieniłeś EDM, ale nie używasz Generuj model bazy danych ... to narzeka, że brakuje pewnych rzeczy w twoich skryptach sql.
tak więc, w skrócie, rozwiązanie jest następujące: „Nie zapomnij wygenerować modelu bazy danych za każdym razem po zaktualizowaniu EDM, jeśli najpierw opracowujesz model. Mam nadzieję, że problem został rozwiązany”.
źródło
W moim przypadku inny programista usunął niektóre tabele z podstawowej bazy danych. Kiedy zdałem sobie z tego sprawę i usunąłem te tabele z encji, problem został rozwiązany. Nie było tak oczywiste, jak się wydaje.
źródło
Napotkałem ten sam błąd, ale nie używałem najpierw modelu. Okazało się, że w jakiś sposób mój plik EDMX zawiera odniesienie do tabeli, mimo że nie pojawiło się to w projektancie. Co ciekawe, gdy wyszukałem tekstowo nazwę tabeli w programie Visual Studio (2013), tabela nie została znaleziona.
Aby rozwiązać ten problem, skorzystałem z zewnętrznego edytora (Notepad ++), aby znaleźć odniesienie do nieprawidłowej tabeli w pliku EDMX, a następnie (ostrożnie) usunąłem wszystkie odniesienia do tabeli. Z przykrością stwierdzam, że w pierwszej kolejności nie wiem, jak plik EDMX znalazł się w tym stanie.
źródło
Miałem zmianę tabeli i utworzyłem kolejną jednostkę z numerem 1 na końcu (na przykład
MyEntity1
aMyEntity
), co zostało potwierdzone przez przeglądarkę modeli edmx. Coś w tych dwóch bytach pomieszało przetwarzanie.Usunięcie stołu i ponowne dodanie go naprawiło.
Zwróć uwagę, że jeśli TFS jest podłączony, po usunięciu wykonaj zaewidencjonowanie edmx. Wtedy i tylko wtedy pobierz najnowsze i dodaj je ponownie w określonym dwuetapowym procesie. W przeciwnym razie TFS jest mylony z usuwaniem i ponownym dodawaniem jednostek o tej samej nazwie, co wydaje się powodować problemy.
źródło
Szybszym sposobem było dla mnie usunięcie tabel i ponowne ich dodanie. Automatycznie je zmapował. :)
źródło
Dla tych, którzy używają
Database First
podejścia, wszystko, co musisz zrobić po wstawieniu nowej encji, toGenerate Database From Model
ponownie kliknąć.edmx
plik prawym przyciskiem myszy i wybraćGenerate Database From Model...
źródło
Wystąpił ten błąd podczas usuwania tabeli z bazy danych. Rozwiązano to, klikając prawym przyciskiem myszy diagram EDMX, przechodząc do Właściwości, wybierając tabelę z listy w oknie Właściwości i usuwając ją (za pomocą klawisza Delete) z diagramu.
źródło
Search within file content
iSearch External Files
usuń wszystkie linie kodów odnoszące się do brakującego obiektu. Będą wyglądać tak:
Ten błąd jest typowy dla tabel usuniętych z bazy danych.
web.config.connectionStrings
Problem polega na porzuceniu tabeli w bazie danych lub po prostu zmianie dla bazy danych mapowanej EF, aby wskazywała na nową, a nie tę używaną do generowania oryginalnych mapowań.To jest ta nowa baza danych, których te jednostki z błędem 3027 nie są obecne.
źródło
Wystąpił błąd, gdy próbowałem utworzyć niestandardowy wynik dla procedury składowanej i założyłem, że musi to być jednostka.
Rozwiązanie polegało na tym, że właśnie utworzyłem złożony typ w przeglądarce Modelu i przypisałem go jako wyniku do opcji „Edycja importu funkcji”.
Dodam to tutaj, ponieważ wygląda na to, że to pytanie dotyczy tego, dokąd Google zabierze Cię, gdy pojawi się ten błąd.
źródło
Ustawiłem wszystko poprawnie (liczebności i właściwości zależne), ale nie mogłem zrozumieć, dlaczego ciągle otrzymuję błąd. Wreszcie zorientowałem się, że EF samodzielnie wygenerował kolumnę w tabeli zależnej (table_tablecolumn) i nie ma żadnej relacji z tabelą, więc nie określono mapowania. Musiałem usunąć kolumnę w pliku EDMX i odbudować rozwiązanie, które rozwiązało problem. Używam podejścia DB.
źródło
Aktualizacja modelu z bazy danych nie działa dla mnie.
Musiałem usunąć skonfliktowaną jednostkę, następnie wykonać aktualizację modelu z bazy danych, na koniec odbudować rozwiązanie. Potem wszystko działa dobrze.
źródło
Udostępnianie tego innym osobom. W moim przypadku pracowaliśmy nad wspólnym rozwiązaniem MVC i używaliśmy wspólnego modułu dla tabel, których używamy do rozwijania. Otrzymałem błąd, gdy zaktualizowałem model Entity, dodając nową tabelę. Okazuje się, że kiedy zaktualizowałem EDMX, prawdopodobnie zaktualizowałem moje prawa dostępu do bazy danych, co skutkowało brakiem dostępu do tej tabeli dając mi
no mapping specified
.Samo ponowne dodanie i przyznanie dostępu mojemu użytkownikowi rozwiązało problem.
źródło
Myślę, że dostałem to, ponieważ nie usunąłem jawnie niektórych tabel z edmx przed zmianą nazwy i ponownym dodaniem ich. Zamiast tego po prostu zmieniłem nazwy tabel, a następnie wykonałem aktualizację modelu z bazy danych, myśląc, że znikną, i usunąłem je z modelu. Następnie wykonałem kolejną aktualizację modelu z bazy danych i dodałem tabele o zmienionych nazwach.
Witryna działała z nowymi tabelami, ale wystąpił błąd. W końcu zauważyłem, że oryginalne tabele nadal były w modelu. Usunąłem je z modelu (kliknij je na ekranie edmx, usuń klawisz), a następnie błąd zniknął.
źródło