Могут ли представления SQL Server иметь первичные и внешние ключи?

.net ado.net-entity-data-model database-design entity-framework sql-server

Вопрос

Можно ли определить первичные и внешние ключи для представлений базы данных в Microsoft SQL Server Management Studio? Как?

Я пытаюсь создать модель данных объекта ADO.NET для чтения из четырех старых, плохо сформированных таблиц базы данных, которые я не могу изменить. Я создал вид только тех данных, которые мне нужны.

Четыре вида должны отображаться в простой EDMX из трех объектов с одним отношением «многие ко многим».

Я получаю эту ошибку при создании моей модели данных:

Для таблицы / представления '...' не определен первичный ключ, и не может быть выведен действительный первичный ключ. Эта таблица / представление была исключена. Чтобы использовать сущность, вам необходимо просмотреть свою схему, добавить правильные ключи и раскомментировать ее.

Он правильно вывел первичные ключи двух представлений. Но не удалось сделать это с двумя другими.

Одно из моих проблемных представлений использует агрегатные функции:

SELECT MAX(...) ... GROUP BY ...

Другой должен иметь составной первичный ключ из двух внешних ключей.

Популярные ответы

Вам необходимо определить свое мнение так, чтобы оно:

  • Включает все столбцы PRIMARY KEY
  • Не использует JOIN
  • Не использует какие-либо агрегатные функции или UNION

Любая строка в вашем представлении должна соответствовать ровно одной строке таблицы.

Одно из моих проблемных представлений использует агрегатные функции

Это не может быть обновлено. Для объекта только для чтения, решение здесь :

Если никакой ключ не может быть выведен, кодовый комментарий, который содержит соответствующий элемент EntityType (без элементов Key), добавляется в раздел SSDL файла .edmx.

В вашем случае, поскольку кажется, что вы хотите объект только для чтения, вы можете:

  1. раскомментируйте сущность SSDL
    • пометить одно / несколько свойств как Nullable = "False"
    • добавить соответствующие ключевые элементы
    • добавить соответствующий определяющий запрос.

По второму вопросу:

Другой должен иметь составной первичный ключ из двух внешних ключей.

Из документации :

Таблица, которая представляет отношение «многие ко многим» между двумя таблицами в базе данных, может не иметь эквивалентной сущности в концептуальной схеме. Когда инструменты EDM встречают такую таблицу без столбцов, отличных от двух, которые являются внешними ключами, таблица сопоставления представляется в концептуальной схеме как ассоциация «многие ко многим», а не как объект.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow