Ma DefiningQuery, ale nie ma elementu InsertFunction ... err

To coś doprowadza mnie do szału, a błąd jest dla mnie zupełnie bezsensowny:

nie można zaktualizować EntitySet 'TableB', ponieważ posiada zapytanie definiujące i w elemencie nie istnieje żaden element obsługujący bieżącą operację.

Moje tabele są umieszczone tak:

TableA
int idA (identity, primary key)
...

TableB
int idA (FK for TableA.idA)
int val

TableB nie ma zdefiniowanego klucza podstawowego w serwerze SQL. Struktura encji zaimportowała tabelę i asocjację i ustawiła oba pola jako klucz. Ale wyświetli ten błąd, gdy spróbuję zrobić wkładka do stołu!

Co się stało??

Edit: Jak zasugerował Alex, rozwiązanie było takie:

  1. kliknij prawym przyciskiem myszy plik edmx, wybierz Otwórz za pomocą edytora XML
  2. W tym celu należy wykonać następujące czynności:]}
  3. Usuń DefiningQuery całkowicie
  4. Zmień nazwę sklepu:Schema="dbo" na Schema="dbo" (w przeciwnym razie kod wygeneruje błąd mówiący, że nazwa jest nieprawidłowa)
  5. Usuń sklep: Nazwa własność

Zostawiłem klucz tak, jak był, ponieważ było dla mnie OK, że obie kolumny są częścią klucza.

Author: Palantir, 2009-10-19

5 answers

Dobrze, gdy tabela jest napotkana bez klucza podstawowego, jest traktowana jako Widok.

I widoki pojawiają się w pliku EDMX (otwórz w edytorze XML, aby zobaczyć) w elemencie StorageModel\EntitySet[n]\DefiningQuery.

Gdy masz zapytanie definiujące, Encja staje się readonly, chyba że dodasz funkcje modyfikacji. Potrzebujesz 3 funkcji modyfikacji (aka procedur składowanych) po jednej dla każdej z nich Insert, Update i Delete.

Ale masz dwie opcje:

Zmień klucz definicja:

  1. i przekonać EF, że to, co uważa za widok, jest naprawdę tabelą
  2. lub dodać odpowiednie funkcje modyfikacji

W Twoim przypadku polecam (1).

 140
Author: Alex James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-17 19:24:31

Wystarczy dodać klucz podstawowy do tabeli. To wszystko. Problem rozwiązany.

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)
 12
Author: Jebastin J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-28 09:11:52

Brakowało mi klucza głównego na stole i dostałem ten Komunikat o błędzie. Jedną rzeczą, którą zauważyłem było 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. Nie odbierał klucza, ponieważ był już przypisany jako widok. Nie wymagało to ręcznej edycji edmx.

 5
Author: mlapaglia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-09 02:02:29

Dodaj klucz podstawowy do tabeli, Usuń model z modelu edmx, a następnie wybierz opcję Aktualizuj z bazy danych, Zbuduj i uruchom...... prace

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-19 07:11:04

@Palantir. Sprawdź, czy obie stoły mają ustawione klucze podstawowe i bądź ostrożny z wieloma kluczami podstawowymi ustawionymi w tabeli.

 1
Author: Paulo 'PaulusHC' Gomes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-27 14:50:25