9

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

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

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

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

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

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

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

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

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

+0

http://stackoverflow.com/a/10302066/413032 –

ответ

7

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

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

Любая строка с вашего вида должна отображаться точно в одну строку из таблицы.

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

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

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

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

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

Что касается второго вопроса:

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

От documentation:

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

+0

Потому что я не могу определить ограничения внешнего ключа (может я?) между представлениями, Visual Studio не может создать желаемые отношения «многие ко многим», которые я хочу. –

+0

Спасибо. Я копаю через автогенерированный XML-файл EDMX и пытаюсь понять это. –

+0

Вы можете определить ограничения внешнего ключа между базовыми таблицами, и инструменты EDM должны быть в состоянии забрать их. Также убедитесь, что в представлении нет других столбцов, кроме двух внешних ключей. – Quassnoi

-1

На самом деле вы можете создать представление, которое использует JOIN и generate и Entity в вашей модели.

2

Вы можете изменить свои взгляды, создавая столбец с NOT NULL индекса по вашему мнению, делать что-то вроде этого:

ALTER VIEW [dbo].[ViewName] 
AS 
    SELECT ISNULL(CAST(CASE ROW_NUMBER() OVER (ORDER BY columnNames) 
          WHEN ROW_NUMBER() OVER (ORDER BY columnNames) 
          THEN ROW_NUMBER() OVER (ORDER BY columnNames) 
          ELSE 0 
         END AS INT), 0) AS ID