У него есть 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:
Как предположил Алекс, решение было таким:
- щелкните правой кнопкой мыши на файле edmx, выберите Открыть с помощью, XML editor
- найдите объект в элементе edmx:StorageModels
- удалить DefiningQuery
- переименовать хранилище: Schema= " dbo "в Schema=" dbo " (в противном случае код будет генерировать сообщение об ошибке, говорящее имя является недействительным)
- удалить магазин: имя свойства
Я оставил ключ как есть, так как для меня было нормально, что оба столбца являются частью ключа.
5 ответов:
Ну, когда таблица встречается без PrimaryKey она рассматривается как представление.
и представления отображаются в файле EDMX (откройте в Редакторе XML, чтобы увидеть) в элементе StorageModel\EntitySet[n]\DefiningQuery.
когда у вас есть DefiningQuery сущность становится только для чтения, если вы не добавляете функции модификации. Вам нужно 3 функции модификации (aka хранимые процедуры) по одному для каждого из Insert, Update и Delete.
но у вас есть два опции:
Изменить ключ definion:
- и убедить EF, что то, что он думает, что это представление на самом деле таблица
- или добавить соответствующие функции модификации
в вашем случае я рекомендую (1).
просто добавьте первичный ключ в таблицу. Вот и все. Проблема решена.
ALTER TABLE <TABLE_NAME> ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)
Я пропустил первичный ключ на моем столе и получил это сообщение об ошибке. Одна вещь, которую я отметил, была после того, как я добавил ключ к таблице, мне нужно было очистить таблицу от edmx с помощью конструктора, сохранить edmx, а затем обновить его снова, чтобы добавить таблицу обратно. Он не брал ключ, так как он уже был назначен в качестве представления. Это не требовало редактирования edmx вручную.
добавьте первичный ключ в таблицу, удалите модель из модели edmx, затем выберите Обновить из базы данных, построить и запустить...... работает
@Palantir. Убедитесь, что обе таблицы имеют набор первичных ключей, и будьте осторожны с несколькими первичными ключами, установленными в таблице.
Comments