ADO.NET Entity Framework: Kreator aktualizacji nie doda tabel


93

I dodał nowy model danych ADO.NET Entity do mojego projektu i używane kreatora aktualizacji , aby dodać tabele do modelu. Pięć z wybranych tabel zostało dodanych do powierzchni projektowej. Dwie inne tabele nie dodają. Wybieram je w kreatorze i klikam przycisk Zakończ, ale nigdy nie pojawiają się na powierzchni projektu.

Czy jest to błąd, czy są sytuacje, w których tabeli nie można dodać do modelu (zgodnie z projektem)?


UPDATE: XML (* .edmx) ujawnia problem.

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->

8
Powinno to zwiększyć liczbę głosów. Nie miałem pojęcia, że ​​Visual Studio nie może dodać tabeli, ponieważ plik .edmx jest jedynym miejscem, w którym błąd faktycznie występuje. Miejmy nadzieję, że będą miały okno dialogowe w wersji 2!
John Bubriski

+1 - w moim przypadku nie było komunikatu o błędzie.
teynon

Jak zauważyłeś, tabele, których nie można importować, nie miały kluczy podstawowych. Dodaj PK i gotowe.
Eric

Odpowiedzi:


46

Powierzchnia projektowa różni się od modelu jednostki. Możliwe jest posiadanie tabeli w mapowaniu w EDMX, która nie pojawia się na powierzchni projektu. Wyświetl plik jako XML, aby sprawdzić, czy tak jest. W takim przypadku Kreator aktualizacji nie pozwoli na ponowne dodanie tabel, ponieważ są one już częścią modelu jednostki. Tak więc, ogólnie rzecz biorąc, Kreator aktualizacji wie więcej o modelu podmiot niż o powierzchni projektowej, per se .

Nie wydaje mi się, aby dokładnie taka była sytuacja, w której się znajdujesz, ale powinna dać ci ogólny pomysł na rozwiązanie: przejdź do XML i poszukaj odniesień do odpowiednich tabel.


4
Właśnie miałem ten problem, usunąłem tabelę z modelu i kiedy poszedłem dodać ją ponownie, projektant wizualny nie pokazał jej jako znajdującej się w bazie danych. Aby to obejść, usunąłem tekst z pliku .edmx, ale udało mi się zepsuć XML. Jeśli to zrobisz, najpierw wykonaj kopię zapasową pliku, na wszelki wypadek. Na szczęście udało mi się znaleźć pomieszany tag z git diff.
GrandMasterFlush

42

Ustaw klucze podstawowe dla wszystkich tabel lub tylko jedno niezaznaczone pole wyboru „Zezwalaj na null” w dowolnej kolumnie każdej tabeli. Mi to pasuje :)


2
Uważam, że to poprawna odpowiedź, przynajmniej dla mnie. Dzięki!
Eric

@Parvinder, zmagałem się z tym problemem w większości mojego projektu. W końcu Twoja odpowiedź wyjaśniła mi wszystko. W moim przypadku, In Joining table nie określiłem pola Not null key lub tylko klucza podstawowego. Po naprawieniu tego miałem spokój.
Wielkie

Z rozwiązania zrozumiałem, że nie możemy dodać tabeli do modelu jednostki, jeśli i) ta tabela nie ma klucza podstawowego lub (ii) w tej tabeli nie ma kolumny Allow Null.
Murtuza Khan

10

1. Zmień strukturę tabeli i dodaj kolumnę podstawową. Zaktualizuj model.

2. Zmodyfikuj plik .EDMX w edytorze XML i spróbuj dodać nową kolumnę pod znacznikiem dla tej konkretnej tabeli. (NIE BĘDZIE DZIAŁAĆ)

Zamiast tworzyć nową kolumnę podstawową do tabeli wychodzącej, utworzę klucz złożony, włączając wszystkie istniejące kolumny.

Entity Framework: dodawanie DataTable bez klucza podstawowego do modelu jednostki.


Napotkałem ten sam problem. Entity Model dodawał tabelę, jednak nie była ona wyświetlana w projektancie. Nie mogłem też uzyskać do niego dostępu w kodzie. Dodałem pole ID Klucz ... działało!
Ravi Ram

6

Ja też miałem ten problem, wszystko powyższe mi nie pomogło. Pomogło mi to, co następuje.

Podczas próby połączenia się z bazą danych ta baza danych może mieć różnych użytkowników z różnymi poświadczeniami, które może zaakceptować. Powiedzmy, że użytkownicy od A do D.

Jeśli spróbujesz połączyć się z użytkownikiem, upewnij się, że użytkownik ma włączone odpowiednie poświadczenia, w tym przypadku włącz opcje odczytu i zapisu.

W tym celu uruchom MS SQL Server Managment Studio, połączone z Twoim serwerem SQL i wybierz bazę danych, z którą próbujesz się połączyć w Visual Studio. W sekcji „twoja_nazwa_db” -> Bezpieczeństwo -> Użytkownicy znajduje się lista użytkowników. Kliknij prawym przyciskiem myszy nazwę użytkownika, za pomocą której próbujesz się zalogować, i wybierz właściwości. Otworzy się okno. Wybierz stronę „Ogólne” (wybrana domyślnie) i na karcie „Członkostwo w roli bazy danych” upewnij się, że zaznaczone są pozycje „db_datareader” i „db_datawrite”.

Uwaga: Gdy się również logujesz MS SQL Server Managment Studio upewnij się, że logujesz się jako użytkownik, który może włączyć / wyłączyć te opcje ...


5

Sprawdź, czy w konkretnej tabeli nie ma „wartości zerowych”. Jeśli wszystkie kolumny są ustawione na „Zezwalaj na wartość Null”, Entity Framework traktuje to jako tabelę „Null”. Miałem ten sam problem i odznaczyłem opcję „Zezwalaj na null” i dodałem wymaganą tabelę.


1
Działa, głupio, w logach nie pojawia się żaden błąd ani ostrzeżenie!
RolandoCC



1

Ten problem został rozwiązany w najnowszej wersji (środowisko: VS 2012, .net framework 4.5). Po prostu otwórz plik .edmx i dodaj wymagane tabele / procedury składowane / widoki. Tabela / widok, który nie ma klucza podstawowego, zostanie utworzony jako tabela / widok tylko do odczytu.

Tabela / widok „TABLE_NAME” nie ma zdefiniowanego klucza podstawowego. Klucz został wywnioskowany, a definicja została utworzona jako tabela / widok tylko do odczytu.


1
błąd i tak pozostaje w niektórych przypadkach zdarzenie w EF 5.0
Greg Z.

0

Nie musisz usuwać całego modelu (może to być setki tabel!).

Kreator może obsłużyć „dodawanie nowych” elementów, ale niektóre zmiany, takie jak zmiana kluczy złożonych i zmiana nazw kolumn - nie wie, co zrobić - więc nie próbuje - i rzeczy wymykają się z synchronizacji.

SO: USUŃ odpowiednie tabele z Model (tryb koncepcyjny) ORAZ z Model.Store, a następnie Zaktualizuj model za pomocą kreatora i ponownie dodaj tylko te tabele.


0

Po prostu wyrzucam więcej szczegółów dla każdego, kto wcześniej nie musiał tego robić. Używam programu Visual Studio 2013 z zainstalowaną aktualizacją 4. Dodałem kilka pól do tabeli, usunąłem tabelę z mojego modelu, a następnie przeszedłem do aktualizacji i nie pozwoliło mi to sprawdzić żadnej z tabel.

Mam klucz podstawowy.

Stworzyłem nową tabelę testową, która się pojawiła i pozwoliła mi to sprawdzić, ale nie oryginalną.

Nigdy wcześniej nie otwierałem go w XML i nie wiedziałem, jak to zrobić. Kliknij prawym przyciskiem myszy plik .edmx i „otwórz za pomocą” - wybierz edytor xml.

stół, o którym mowa, był tam w porządku, miał nawet nowe pola (dziwne).

Usunąłem wszystkie odniesienia do niego (zajęło to kilka razy) - po usunięciu jednego i zapisaniu, jeśli spróbujesz go otworzyć i nie wyświetli się, po prostu wybierz "wyświetl XML" - spójrz na błędy i w zasadzie podążaj za odbijającą się piłką, aż ją wyczyścisz.

mam nadzieję, że te dodatkowe szczegóły komuś pomogą.

Joe


0

Jednym prostym sposobem, jaki znalazłem, było (w SQL Server Management Studio) dodanie kolumny ID typu INT, odznaczenie opcji „Zezwalaj na wartości Null” oraz w obszarze Właściwości kolumny (identyfikatora) >> Specyfikacja tożsamości >> sprawdź (Jest tożsamością) i czy ustawiono przyrost.

Po wykonaniu powyższych czynności wróć do okna .edmx, kliknij prawym przyciskiem myszy i Aktualizuj model z bazy danych.


0

Możesz dodać tabelę krzyżową kolumn klucza podstawowego. Wtedy problem się rozwiązuje


0

Innym rozwiązaniem jest zapewnienie, że konto, za pośrednictwem którego uzyskujesz dostęp do bazy danych, ma pewne uprawnienia do tabeli, przynajmniej Wybierz. Tabela nie zostanie dodana, jeśli konto nie ma do niej uprawnień.

W programie SSMS w obszarze Zabezpieczenia kliknij prawym przyciskiem myszy użytkownika lub rolę, a następnie opcję Właściwości. Następnie kliknij Securables. Górna tabela pokazuje aktualnie dostępne stoły. Jeśli nie ma brakujących tabel, kliknij Szukaj i znajdź, zaznacz je w górnej tabeli, a następnie przypisz uprawnienia w dolnej tabeli

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.