Как добавить первичный ключ в представление sql? - Или альтернативный способ привязки представлений к LINQ-2-объектам

Я добавляю очень простой вид (или пытаюсь) к объектной модели объектов. База данных находится в SQL Server 2008. Я на .Net 3.5 (SP1), используя С#.

Вид имеет два поля: цвет и цвет, Varchar (50) и счетчик (*) соответственно.

Когда я обновляю модель из базы данных и выбираю представление для добавления, он запускается (он обновлял таблицы, добавляя поля без проблем), но не добавляя представление. Сообщения об ошибках, предупреждениях и сообщениях не отображаются.

Когда я открываю файл .edmx, я вижу, что он показывает Warning 6013: No primary key defined.

Вид сложный, и я предпочел бы не переводить его в запрос LINQ. Как добавить первичный ключ, чтобы объекты поддерживали представление?

Есть ли способ не-hack-around для добавления такого вида в EDMX?

Ответ 1

После создания представления с помощью schemabinding вы можете добавить к нему первичный ключ:

CREATE VIEW Colors WITH SCHEMABINDING
AS SELECT Color='yellow', ColorCount=100
GO
CREATE UNIQUE CLUSTERED INDEX PK_Colors ON Colors (Color)

Ответ 2

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

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

CREATE FUNCTION (Transact-SQL)