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>-->
.net
visual-studio-2008
entity-framework
ado.net
primary-key
Robert Claypool
źródło
źródło
Odpowiedzi:
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.
źródło
Ustaw klucze podstawowe dla wszystkich tabel lub tylko jedno niezaznaczone pole wyboru „Zezwalaj na null” w dowolnej kolumnie każdej tabeli. Mi to pasuje :)
źródło
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.
źródło
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 ...
źródło
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ę.
źródło
Tabele bez kluczy podstawowych nie zostaną dodane.
źródło
Moim rozwiązaniem jest usunięcie całego modelu i ponowne jego odczytanie, w tym nowe tabele, które chcę.
Raz przypadkowo usunąłem tabelę w projektancie i nie mogłem jej odczytać. Stąd usunięcie całego modelu i odczytanie go.
Miałem też z tym pewne problemy ( model danych jednostki Ado.Net nie aktualizuje się poprawnie )
źródło
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.
źródło
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.
źródło
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
źródło
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.
źródło
Możesz dodać tabelę krzyżową kolumn klucza podstawowego. Wtedy problem się rozwiązuje
źródło
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
źródło