У него есть DefiningQuery, но нет элемента InsertFunction ... err



эта вещь сводит меня с ума, и ошибка совершенно бессмысленна для меня:



не удалось обновить EntitySet 'TableB', поскольку он имеет DefiningQuery и в элементе не существует элемента для поддержки текущей операции.



мои таблицы ставятся так:




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

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


TableB не имеет определенного первичного ключа в SQL server. Платформа Entity Framework импортировала таблицу и связь и установила оба поля в качестве ключа. Но это будет выведите эту ошибку, когда я пытаюсь сделать вставку в таблицу!



Что случилось??





Edit:
Как предположил Алекс, решение было таким:




  1. щелкните правой кнопкой мыши на файле edmx, выберите Открыть с помощью, XML editor

  2. найдите объект в элементе edmx:StorageModels

  3. удалить DefiningQuery

  4. переименовать хранилище: Schema= " dbo "в Schema=" dbo " (в противном случае код будет генерировать сообщение об ошибке, говорящее имя является недействительным)

  5. удалить магазин: имя свойства


Я оставил ключ как есть, так как для меня было нормально, что оба столбца являются частью ключа.

521   5  

5 ответов:

Ну, когда таблица встречается без PrimaryKey она рассматривается как представление.

и представления отображаются в файле EDMX (откройте в Редакторе XML, чтобы увидеть) в элементе StorageModel\EntitySet[n]\DefiningQuery.

когда у вас есть DefiningQuery сущность становится только для чтения, если вы не добавляете функции модификации. Вам нужно 3 функции модификации (aka хранимые процедуры) по одному для каждого из Insert, Update и Delete.

но у вас есть два опции:

Изменить ключ definion:

  1. и убедить EF, что то, что он думает, что это представление на самом деле таблица
  2. или добавить соответствующие функции модификации

в вашем случае я рекомендую (1).

просто добавьте первичный ключ в таблицу. Вот и все. Проблема решена.

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)

Я пропустил первичный ключ на моем столе и получил это сообщение об ошибке. Одна вещь, которую я отметил, была после того, как я добавил ключ к таблице, мне нужно было очистить таблицу от edmx с помощью конструктора, сохранить edmx, а затем обновить его снова, чтобы добавить таблицу обратно. Он не брал ключ, так как он уже был назначен в качестве представления. Это не требовало редактирования edmx вручную.

добавьте первичный ключ в таблицу, удалите модель из модели edmx, затем выберите Обновить из базы данных, построить и запустить...... работает

@Palantir. Убедитесь, что обе таблицы имеют набор первичных ключей, и будьте осторожны с несколькими первичными ключами, установленными в таблице.

Comments

    Ничего не найдено.