To mnie doprowadza do szału, a błąd jest dla mnie zupełnie bez znaczenia:
Nie można zaktualizować EntitySet „TableB”, ponieważ ma on DefiningQuery i nie ma elementu w elemencie do obsługi bieżącej operacji.
Moje tabele są ułożone w następujący sposób:
Tabela A. int idA (tożsamość, klucz podstawowy) ... Tabela B. int idA (FK dla TableA.idA) int val
TableB nie ma zdefiniowanego klucza podstawowego na serwerze SQL. Entity Framework zaimportował tabelę i skojarzenie oraz ustawił oba pola jako klucz. Ale wyświetli ten błąd, gdy spróbuję wstawić do tabeli!
Co jest nie tak??
Edycja: zgodnie z sugestią Alexa rozwiązanie było następujące:
- Kliknij prawym przyciskiem myszy plik edmx, wybierz Otwórz za pomocą, edytor XML
- Znajdź jednostkę w elemencie edmx: StorageModels
- Całkowicie usuń DefiningQuery
- Zmień nazwę sklepu: Schema = „dbo” na Schema = „dbo” (w przeciwnym razie kod wygeneruje błąd informujący, że nazwa jest nieprawidłowa)
- Usuń właściwość store: Name
Zostawiłem klucz tak, jak był, ponieważ było dla mnie OK, że obie kolumny są częścią klucza.
asp.net
entity-framework
Palantir
źródło
źródło
Odpowiedzi:
Cóż, gdy napotkano tabelę bez klucza podstawowego, jest ona traktowana jako widok.
Widoki pojawiają się w pliku EDMX (otwieranym w edytorze XML, aby zobaczyć) w elemencie StorageModel \ EntitySet [n] \ DefiningQuery.
Gdy masz DefiningQuery, jednostka staje się tylko do odczytu, chyba że dodasz funkcje modyfikacji. Potrzebujesz 3 funkcji modyfikacji (zwanych również procedurami składowanymi), po jednej dla każdej funkcji Wstaw, Aktualizuj i Usuń.
Ale masz dwie opcje:
Zmień definicję klucza:
W twoim przypadku polecam (1).
źródło
Po prostu dodaj klucz podstawowy do tabeli. Otóż to. Problem rozwiązany.
źródło
Brakowało mi klucza podstawowego w moim stole i pojawił się ten komunikat o błędzie. Jedną rzeczą, którą zauważyłem, było to, że po dodaniu klucza do tabeli musiałem wyczyścić tabelę z edmx za pomocą projektanta, zapisać edmx, a następnie zaktualizować go ponownie, aby dodać tabelę z powrotem. To nie było pobieranie klucza ponieważ został już przypisany jako widok. Nie wymagało to ręcznej edycji edmx.
źródło
Dodaj klucz podstawowy do tabeli, usuń model z modelu edmx, następnie wybierz aktualizację z bazy danych, zbuduj i uruchom ...... działa
źródło
@Palantir. Sprawdź, czy obie tabele mają ustawione klucze podstawowe i zachowaj ostrożność w przypadku wielu kluczy podstawowych ustawionych w tabeli.
źródło
Mam nadzieję, że to rozwiąże problem.
źródło